先后顺序如下!
创新互联总部坐落于成都市区,致力网站建设服务有成都网站制作、网站建设、网络营销策划、网页设计、网站维护、公众号搭建、重庆小程序开发、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!
1.静态块
2.块
3.构造器
4.父类构造器
运行顺序为:
1. 静态块
2. 父类构造器
3. 本类中的块
4. 本类的构造器
虚拟机是遇到哪个类不认识了,就去加载哪个!
先运行语句①还是方法init(),其实是先运行 Class1 的 public Class1(),后运行 Book book1;
下面是依据
public class Test {
C c= new C();
public Test() {
System.out.println("hah");
}
C d= new C();
public static void main(String[] args) {
Test s = new Test();
}
}
class C{
public C(){
System.out.println( "c");
}
}
下面是结果
c
c
hah
为什么先运行class C却后输出结果呢
因为虚拟机是用栈来解释的,先进去的后出去!
先解释 Test ,可是这个时候需要解释掉C,所以当把 C完全初始化后,才能初始化 Test,所以先打出的 是“c”,但是先运行的的确是 class Test
这个不是运行顺序的问题,是变量作用范围的问题。
static void updata(int a){
a++;
}
这个作用域止于这个方法,方法结束,作用域就结束,a又是基本类型,因此没有变化;
static void updata(Koo koo){
koo.a++;
}
传递的是引用类型,方法中修改了引用类型对应的实例的属性,本作用域与对象实例指示的是同一个,故值会递增;
static int updata2(int a){
a++;
return a;
}
static int updata2(Koo koo){
koo.a++;
return koo.a;
}
这两个因为使用了临时变量存储计算的结果并返回,故递增了~
Flowerx=newFlower()调用Flower()Flower()调用this("hi",47);即Flower(Strings,intpetals)Flower(Strings,intpetals)调用this(petals)即Flower(intpetals)调用结束所以顺序是:Flower()-Flower(Strings,intpetals)-Flower(intpetals)Flower(Stringss)没有被调用