现在的位置: 首页 > 综合 > 正文

程序执行顺序

2018年02月04日 ⁄ 综合 ⁄ 共 1662字 ⁄ 字号 评论关闭

public class TestA {  

   public TestA(String a){  

       System.out.println(a);  

   }  

}  

/**类B**/ 

public class TestB {  

   public TestB(String b){  

       System.out.println(b);  

   }  

}  

/**类 Parent **/ 

public class Parent {  

   private static TestA testA1 = new TestA("Parent的静态变量");  

   static {  

       System.out.println("Parent的静态初始化模块");  

   }  

   private  TestA testA2 = newTestA("Parent变量");  

   {  

       System.out.println("Parent的初始化模块");  

   }  

   public Parent(){  

       System.out.println("Parent的构造函数");  

   }  

}  

 

/**Parent的子类SubClass**/ 

public class SubClass extends Parent{  

   private static TestA testA1 = new TestA("SubClass的静态变量1");  

   static {  

       System.out.println("SubClass的静态初始化模块1");  

   }  

   private static TestA testA2 = new TestA("SubClass的静态变量2");  

   static {  

       System.out.println("SubClass的静态初始化模块2");  

   }  

   private  TestA testA3 = newTestA("SubClass变量1");  

   {  

       System.out.println("SubClass的初始化模块1");  

   }  

   private  TestA testA4 = newTestA("SubClass变量2");  

   {  

       System.out.println("SubClass的初始化模块2");  

   }  

   public SubClass(){  

       System.out.println("SubClass的构造函数");  

   }  

    publicstatic void main(String[] args) {  

       SubClass subClass = new SubClass();  

   }  

 

 

打印结果如下:

 

   Parent的静态变量

   Parent的静态初始化模块

 

   SubClass的静态变量1

 

 

   SubClass的静态初始化模块1

 

 

   SubClass的静态变量2

 

 

   SubClass的静态初始化模块2

 

   Parent变量

 

    Parent的初始化模块

 

   Parent的构造函数

 

   SubClass变量1

 

 

   SubClass的初始化模块1

 

 

   SubClass变量2

 

 

   SubClass的初始化模块2

 

 

   SubClass的构造函数

 

 说明 :

 

1.静态变量与静态模块是最先初始化的,因为它是属于类的变量和模块.

 

2.Parent的构造器要先于它的子类,这一点是肯定的,但Parent的变量,初始化模块要先于它的子类,这一点可能理解起来有点困难,但我们只要知道父类的构造器先于子类,它的变量与模块也是理所当然的,这样理解起来会比较合理.

 

3.静态变量与静态模块的初始化顺序是根据在类里面定义的顺序,同理变量化初始化模块的顺序也是根据类里面定义的顺序(上面结果的红色部门)

抱歉!评论已关闭.