最近在看《Think in JAVA》,这是其中的一节内容,没怎么看明白,动手写了一段
class ObjInit { ObjInit() { System.out.println("ObjInit"); } private static int x = testInit(); private static int testInit() { System.out.println("ObjInit static init"); return 2; } } class ObjInit2 extends ObjInit { ObjInit2() { System.out.println("ObjInit2"); } private static int x = testInit(); private static int testInit() { System.out.println("ObjInit2 static init"); return 2; } } public class ObjectInitTest extends ObjInit2 { public static void main(String[] args) { // TODO Auto-generated method stub //ObjectInitTest g=new ObjectInitTest(); System.out.println("我只是分隔符"); ObjectInitTest g2=new ObjectInitTest(); } }
输出结果:
ObjInit static init
ObjInit2 static init
我只是分隔符
ObjInit
ObjInit2
结论:
在java继承后,进行初始化时,
1.系统将首先对从基类到继承类的static变量进行初始化;
2.然后进行构造方法
如果类里面没有static变量的话,还是很好理解的。。。