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”);
}
}
//结果-------------------------------------------