测试3个内容:
1.类加载顺序
2.子父类执行过程
3.对象初始化过程
从几次试验我们看到
1.当执行到类时,类被加载到内存,并初始化
2.静态成员被加载到共享区
3.不用实例化对象就可以调用静态资源
4.静态成员变量,静态成员方法,静态代码块,只初始化一次
5.而普通变量,普通代码块,构造方法,在每次实例化对象时都要初始化
6.子类对象要初始化时,会先初始化父类静态成员和静态代码块,再初始化子类静态成员和静态代码块,
然后是父类普通代码块,父类构造方法,然后是子类普通代码块,子类构造函数
当子类名直接调用继承自父类的静态成员时,子类不会初始化,而只初始化父类(因为这已经足够了)
*/
class Fu { //父类
public static String staticField = “父类-静态变量”;
public static String extend = “父类-静态变量extend”; //让子类调用
public String field = “父类-普通变量”;
public Fu(){
System.out.println(“父类-构造方法”);
}
static{
System.out.println(“Fu_static: 父类-静态初始化块”);
System.out.println(“Fu_static:”+staticField);
}
{
System.out.println(“Fu_普通块:”+field);
System.out.println(“Fu_普通块:”+”父类-初始化块”);
}
}
class Zi extends Fu{//子类
public static String staticField = “子类 静态变量”;
public String field = “子类 普通变量”;
{
System.out.println(“Zi_普通块:”+field);
System.out.println(“Zi_普通块:”+”子类 初始化块”);
}
public Zi(){
System.out.println(“子类 子类构造方法”);
}
static{
System.out.println(“Zi_static:”+”子类 静态初始化块”);
System.out.println(“Zi_static:”+staticField);
}
}
class Demo {
public static void main(String args[]) throws Exception{
System.out.println(“main方法”);
//Thread.sleep(2000);
//System.out.println(“Zi.staticField:”+Zi.staticField);
//Thread.sleep(2000);
//System.out.println(“…”);
//Fu fu = new Fu();
Thread.sleep(2000);
System.out.println(“”);
Zi zi = new Zi();
System.out.println(“”);
Zi zi2 = new Zi();
//System.out.println(Zi.extend); //子类名调用父类静态成员
}
}
转载请注明来源网站:blog.ytso.com谢谢!
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/14654.html