黑马程序员技术交流社区

标题: 静态代码块,非静态代码块,构造函数的执行顺序(带题) [打印本页]

作者: 耳东君    时间: 2015-4-9 22:24
标题: 静态代码块,非静态代码块,构造函数的执行顺序(带题)
  1. public class ExA {  
  2.     //private static ExA a = new ExA();
  3.     static {  
  4.         System.out.println("父类--静态代码块A");  //1.java虚拟机加载ExA.class文,静态代码块执行
  5.     }  
  6.   
  7.     public ExA() {  
  8.         System.out.println("父类--构造函数B");  //7 父类的构造方法中的代码被执行
  9.     }  
  10.   
  11.     {  
  12.         System.out.println("父类--非静态代码块C"); /*6  父类中的构造代码块被执行,(网上说:在编
  13.                 译时期编译器会默认将构造代码块中的代码移动到构造方法中,而且移动到构造方法的前面,所以他
  14.                 优先于构造方法中的代码先执行)*/
  15.     }  
  16.   
  17.     public static void main(String[] args) {  
  18.                 System.out.println("主函数打印语句S");//2.找到主函数,执行打印语句。
  19.       new ExB();//3. 创建子类匿名对象
  20.     }  
  21. }  
  22.   
  23. class ExB extends ExA {  
  24.         // private static ExB b = new ExB();  
  25.     static {  
  26.         System.out.println("子类--静态代码块D");  //4.主函数中创建子类匿名对象后,加载ExB.class文件 子类静态代码块执行
  27.     }  
  28.     {  
  29.         System.out.println("子类--非静态代码块E"); //8 子类的构造代码块被执行
  30.     }       
  31.   
  32.     public ExB() {  
  33.                 //super() 5.执行父类的构造方法
  34.         System.out.println("子类--构造函数F");  //9 子类构造方法中的代码被执行
  35.     }  
  36. }
复制代码



上面执行顺序的前提是private static ExA a = new ExA(); private static ExB b = new ExB();  都被注释掉了,求去掉注释后此段代码的执行顺序变化的原因。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2