package java_219_JVM核心机制_类加载全过程_初始化时机_类的主动引用和被动引用_静态初始化块执行顺序问题_练习;
public class Demo01 { //如果添加静态方法 先加载链接然后初始化后;才能往下执行 static { System.out.println(“静态初始化类A”); } public static void main(String[] args) throws ClassNotFoundException { //调用main方法也会初始化 System.out.println(“Demo01的main方法”); //System.out.println("(先执行Demo01的main方法,然后在调用A方法)"); //A a = new A();//2.调用这个方法 //主动引用;初始化 new A(); System.out.println(A.width);//4.打印这个 //A a2 = new A();//类加载的初始化只有一次;不需要反复加载
//反射加载类也会初始化 Class.forName("java_219_JVM核心机制_类加载全过程_初始化时机_类的主动引用和被动引用_静态初始化块执行顺序问题_练习.A");//处理异常 //被动引用;3种类型 System.out.println(A. MAX);//A不会初始化;被动引用 A[] as = new A[10];//数组引用也不会初始化 System.out.println(B.width);//B继承了A的相关内容;子类不会初始化 }} /*
测试 */ class A extends A_Father{ //继承父类
//创建一个变量 static属性;1.(a)先执行类加载 public static int width = 100;//width 宽度;即静态变量,静态域(field)
public static final int MAX = 200;//如果调用常量 则不会初始化 //定义一个初始化块;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”); }
} class B extends A{ static { System.out.println(“静态初始化类B”); } }