看完此文档,类的加载顺序包你清清楚楚
1先执行父类中的静态的属性赋值,然后再执行子类的静态属性赋值;
2然后执行父类的属性赋值和父类的构造方法;
3然后执行子类的属性赋值和构造方法;
public static void main(String[] args) {
System.out.println("Beetle constructor");
Beetle b = new Beetle();
}
这里省略书写了两个类(子类Beetle.java 和父类 Insect.java )
- 这段代码先执行父类的静态属性赋值
- 执行子类的静态属性赋值
- 然后再输出Beetle constructor,
- 然后再执行父类的普通属性赋值和构造方法
- 接着执行子类的普通属性赋值和构造方法
注意:这个main方法是写在子类Beetle.java 中。
先静态属性/静态代码块>main方法>普通属性/普通代码块>构造方法
静态方法,和普通方法在被静态属性或者普通属性赋值调用时,可以在构造方法之前运行。
举例说明:
static int x2 = printInit("static Beetle.x2 initialized");
static int printInit(String s) {
System.out.println(s);
return 47;
}
这里的静态方法printInit比构造方法就先执行
静态属性如果没有赋值(int a;),则就是默认值,执行顺序第一,如果属性有赋值(int b=12;),紧接着对静态属性赋值,如果赋值操作是调用函数,则调用函数赋值。(这里的函数只能是static方法)
普通属性没有赋值,在new对象之前给出默认值,如果属性有赋值是通过调用函数赋值,则调用函数来赋值。接着运行构造方法(这里函数可以既是static方法,也可以是普通方法)
静态属性和静态代码块按书写顺序执行先后。优先级是相同的,普通属性和普通代码块也是如此。
静态代码块中的声明的属性,作用域只在花括号范围内。静态代码块中可以使用静态属性,不能使用普通属性,会报没有初始化属性的错误
当静态代码块书写在静态属性前面时,则不可以使用静态属性,此时静态属性还没有初始化。
浙公网安备 33010602011771号