Java中的继承与静态static等的执行先后顺序的面试题

java中类的初始化及子类、父类之间的初始化顺序,静态变量、静态方法的初始化都涵盖了的一道面试题

面试题目如下:请写出程序执行完成之后的结果。

Java代码   收藏代码
  1. package extend;  
  2.   
  3. public class X {  
  4.  Y y=new Y();  
  5.  static{  
  6.   System.out.println("tttt");  
  7.  }  
  8.  X(){  
  9.   System.out.println("X");  
  10.  }  
  11.    
  12.  public static void main(String[] args) {  
  13.     new Z();  
  14.   
  15.  }  
  16. }  
  17.   
  18. class Y{  
  19.  Y(){  
  20.   System.out.println("Y");  
  21.  }  
  22. }  
  23.   
  24. class Z extends X{  
  25.  Y y=new Y();  
  26.  static{  
  27.   System.out.println("tt");  
  28.  }  
  29.  Z(){  
  30.   System.out.println("Z");  
  31.  }   
  32. }  

 思路:

1.加载类的时候先后顺序是:先加父类静态块和静态变量(先后顺序)再加载子类静态块和静态变量。

2.执行完成之后调用main方法(),new Z() 。

3.子类继承父类,先执行父类的实例成员初始化,再执行父类构造器。

4.执行子类的实例成员初始化,再执行子类的构造器。


整个过程就是这样,结果如下:

tttt
tt
Y
X
Y
Z


注意:静态块和静态变量只加载一次,加载过之后就不再加载

你可能感兴趣的:(java,java,面试题)