看完此文档,类的加载顺序包你清清楚楚

 

 

1先执行父类中的静态的属性赋值,然后再执行子类的静态属性赋值;

2然后执行父类的属性赋值和父类的构造方法;

3然后执行子类的属性赋值和构造方法;

 

 

public static void main(String[] args) {

System.out.println("Beetle constructor");

Beetle b = new Beetle();

}

这里省略书写了两个类(子类Beetle.java  和父类 Insect.java

  1. 这段代码先执行父类的静态属性赋值
  2. 执行子类的静态属性赋值
  3. 然后再输出Beetle constructor,
  4. 然后再执行父类的普通属性赋值和构造方法
  5. 接着执行子类的普通属性赋值和构造方法

注意:这个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方法,也可以是普通方法)

 

静态属性和静态代码块按书写顺序执行先后。优先级是相同的,普通属性和普通代码块也是如此。

静态代码块中的声明的属性,作用域只在花括号范围内。静态代码块中可以使用静态属性,不能使用普通属性,会报没有初始化属性的错误

当静态代码块书写在静态属性前面时,则不可以使用静态属性,此时静态属性还没有初始化。

 

posted on 2018-04-16 01:54  卢锡安  阅读(111)  评论(0)    收藏  举报