- class X
- {
- Y b=new Y();
- X()
- {
- System.out.print("X");
- }
- }
- class Y
- {
- Y()
- {
- System.out.print("Y");
- }
- }
- public class Z extends X
- {
-
- Z()
- {
- System.out.println("Z");
- }
- {
- System.out.println("111111");
- }
- Y y=new Y();
- {
- System.out.println("222222222222");
- }
- public static void main(String[] args)
- {
- new Z();
- }
- }
复制代码 运行结果为,
YX111111
Y222222222222
Z
开始代码运行时,首先是z类,由于z类继承与x,所以要首先加载X类,加载x类,首先是加载类的公共变量,也就是 Y b=new Y();,这一句是创建y类对象,所以执行new Y();时,就要加载Y类,进入Y类,加载Y类的构造函数,所以此时输出Y;加载完Y类后,又回到X类,继续加载X类的构造函数,从而输出X,然后就进入Z类,然后运行加载Z类里的 Y y=new Y();,此时又是创建Y类对象,所以又要加载Y类,进入Y类,加载构造函数,输出Y,Y类运行完后又回到Z类里,然后运行main函数,在main函数里有new Z();所以创建Z对象,加载Z类的构造函数,输出Z,这就是运行过程,你可以在一些地方加一些system.out.println();语句,使其输出一些字符观察运行顺序.
根据上面的代码,可见2楼的错了
|