类初始化详细过程!

来源:互联网 发布:内饰 防御机制 知乎 编辑:程序博客网 时间:2024/04/30 07:26
package zhao;
public class TestClass extends BaseClass {
 static{
        System.out.println("我输出的是 子类静态块内容→"+TestClass.name);//第四步
    }
    {
        System.out.println("我输出的是 子类非静态块内容→"+this.code);//第十三步
    }
    static String name = "子类静态变量";//第五步
    String code ="子类非静态变量初始化";//第十四步
    TestClass(){
        code = "子类构造方法里该修了的 code 的值";//第十六步
        System.out.println("我输出的是 子类构造体→"+code);//第十七步
    }
    static{
        System.out.println("我输出的是 子类静态块内容→"+name);//第六步
    }
    {
        System.out.println("我输出的是 子类非静态块内容→"+code);//第十五步
    }
    /** *//**
     * @param args
     */
    public static void main(String[] args) {
        new TestClass();
    }
}
class BaseClass{
 static {
  
        System.out.println("我输出的是 父类静态块内容→"+BaseClass.basename);//第一步,因为basename先初始化默认值!所以为null
    }
    {
        System.out.println("我输出的是 父类非静态块内容→"+this.basecode);//第七步,因为basecode先初始化默认值!所以为null
    }
    static String basename = "父类静态变量"; //第二步
    String basecode ="父类非静态变量初始化";//第八步
    BaseClass(){
        basecode = "父类构造方法里该修了的 basecode 的值";//第十一步
        System.out.println("我输出的是 父类构造体→"+basecode);//第十二步
    }
    static {
        System.out.println("我输出的是 父类静态块内容→"+basename);//第三步
    }
    {
        System.out.println("我输出的是 父类非静态块内容→"+basecode);//第九步
    }
}

1:父类静态变量的默认初始化

2.父类静态变量初始化,父类静态块代码(静态变量和静态块代码中,哪个在前面就先执行哪个)

3:子类静态变量的默认初始化

4.子类静态变量,子类静态块代码(静态变量和静态块代码中,哪个在前面就先执行哪个)

5:父类非静态变量的默认初始化

6:父类非静态变量,父类非静态块代码(非静态变量和非静态块代码中,哪个在前面就先执行哪个)

7.父类构造体

8.子类非静态变量的默认初始化

9.子类非静态变量,子类非静态块代码(非静态变量和非静态块代码中,哪个在前面就先执行哪个)

10:子类构造体

经常有人问初始化的顺序,我在这里详细的说明了,看帖一定要回帖哦!

原创粉丝点击