java_219_JVM核心机制_类加载全过程_初始化时机_类的主动引用和被动引用_静态初始化块执行顺序问题_练习1

package java_219_JVM核心机制_类加载全过程_初始化时机_类的主动引用和被动引用_静态初始化块执行顺序问题_练习;

public class Demo01 {
//如果添加静态方法 先加载链接然后初始化后;才能往下执行
static {
System.out.println(“静态初始化类A”);
}
public static void main(String[] args) {
System.out.println(“Demo01的main方法”);
System.out.println("(先执行Demo01的main方法,然后在调用A方法)");
A a = new A();//2.调用这个方法
System.out.println(A.width);//4.打印这个
A a2 = new A();//类加载的初始化只有一次;不需要反复加载
}
}
/*

  • 测试
    */
    class A extends A_Father{ //继承父类

    //创建一个变量 static属性;1.(a)先执行类加载
    public static int width = 100;//width 宽度;即静态变量,静态域(field)
    //定义一个初始化块;1.(b)先执行类加载;进行静态初始化
    static {
    System.out.println(“静态初始化类A”);
    width = 300;//最后打印出300;是因为程序从上往下合并执行
    }
    public A(){//3.在执行这个构造器对象;
    System.out.println(“创建A类的对象”);
    }
    }
    /**

  • 测试调用的顺序;类的加载过程;初始化时机

  • @author Administrator

*/
class A_Father{ //Father父类;Father的父类是Object;同理调用也是先调用Object的静态方法;先初始化Object的静态方法
//定义一个初始化块;
static {
System.out.println("=先执行父类");
System.out.println(“静态初始化类A_Father”);
}

}
//结果-------------------------------------------
java_219_JVM核心机制_类加载全过程_初始化时机_类的主动引用和被动引用_静态初始化块执行顺序问题_练习1