实例化类的执行顺序

现来看下面一个例子:

 

  1. import java.util.Random;  
  2.   
  3. /* 
  4.  * @author majb 
  5.  */  
  6.     class Student {  
  7.         /* 姓名 */  
  8.         private String name = null;  
  9.         /* 年龄 */  
  10.         private int age = 0;  
  11.         {  
  12.             System.out.println("执行实例初期化块");  
  13.             studentID = nextStudentID;  
  14.             nextStudentID++;  
  15.         }  
  16.         /* 性别 */  
  17.         private boolean sex = setSex();  
  18.         /* 学号 */  
  19.         private int studentID = 0;  
  20.           
  21.         static  
  22.         {  
  23.             System.out.println("执行静态初期化块");  
  24.             Random random = new Random();  
  25.             nextStudentID = random.nextInt(10000);  
  26.         }  
  27.         private static int nextStudentID = setNextStudentID();  
  28.           
  29.         {  
  30.             System.out.println("执行第二个实例初期化块");  
  31.         }  
  32.           
  33.         static  
  34.         {  
  35.             System.out.println("执行第二个静态初期化块");  
  36.         }  
  37.         public Student()  
  38.         {  
  39.             this("Default"21);  
  40.             System.out.println("执行第一个构造器的主体");  
  41.             this.sex = true;  
  42.         }  
  43.         public Student(String name, int age)  
  44.         {  
  45.             System.out.println("调用第二个构造器");  
  46.             this.name = name;  
  47.             this.age = age;  
  48.         }  
  49.           
  50.         boolean setSex()  
  51.         {  
  52.             System.out.println("实例域初期化");  
  53.             return false;  
  54.         }  
  55.           
  56.         static int setNextStudentID()  
  57.         {  
  58.             System.out.println("静态域初期化");  
  59.             return 0;  
  60.         }  
  61.     }  

 

如果在main方法中调用无参数的构造函数去实例化Student类时,有以下的输出结果:

执行静态初期化块
静态域初期化
执行第二个静态初期化块
执行实例初期化块
实例域初期化
执行第二个实例初期化块
调用第二个构造器
执行第一个构造器的主体

通过上面的例子相信大家都清楚了实例化类时的执行顺序,下面以理论叙述的方式总结一下:

一:所有数据域都被初期化为默认值(0或false或null)。

二:按照在类中声明的顺序依次执行所有静态域初期化语句和初期化块。

三:按照在类中声明的顺序依次执行所有实例域初期化语句和初期化块。

四:如果构造器第一行调用了第二个构造器(无论父类构造器,还是本类中重构的构造器),则执行第二个构造器主体。

五:执行这个构造器的主体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值