Java中对象初始化顺序

来源:互联网 发布:apache 网络驱动器 编辑:程序博客网 时间:2024/05/18 00:24

文章2010-07-18发于iteye,地址:http://cadillac.iteye.com/admin/blogs/715530

参考资料:http://student.csdn.net/space.php?uid=207064&do=thread&id=11192 

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: 
1、首先加载要创建对象的类及其直接与间接父类。 
2、在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序进行。
3、需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序进行。 
4、最后执行构造器,构造器执行完毕,对象生成。 

下面的例子说明了上述加载规则,代码如下: 

Java代码 
  1. public class MyClassFather {  
  2. public MyClassFather() {  
  3.    System.out.println("执行要创建对象类父类的构造器");  
  4. }  
  5. }  
  6.   
  7. public class MyClass extends MyClassFather {  
  8. public MyClass() {  
  9.    System.out.println("执行要创建对象类的构造器");  
  10. }  
  11.   
  12. Unstatic u = new Unstatic();  
  13. final UnstaticFinal uf = new UnstaticFinal();  
  14. {  
  15.    System.out.println("执行非静态语句块");  
  16. }  
  17. static {  
  18.    System.out.println("执行静态语句块");  
  19. }  
  20. static final StaticFinal sf = new StaticFinal();  
  21. static Static s = new Static();  
  22. }  
  23.   
  24. public class StaticFinal {  
  25. public StaticFinal() {  
  26.    System.out.println("静态final的成员变量初始化");  
  27. }  
  28. }  
  29.   
  30. public class Static {  
  31. public Static() {  
  32.    System.out.println("静态非final的成员变量初始化");  
  33. }  
  34. }  
  35.   
  36. public class UnstaticFinal {  
  37. public UnstaticFinal() {  
  38.    System.out.println("非静态final的成员变量初始化");  
  39. }  
  40. }  
  41.   
  42. public class Unstatic {  
  43. public Unstatic() {  
  44.    System.out.println("非静态非final的成员变量初始化");  
  45. }  
  46. }  
  47.   
  48. public class Sample10_16 {  
  49. public static void main(String[] args) {  
  50.    new MyClass();  
  51. }  
  52. }  


运行结果如下: 
执行静态语句块!!! 
静态final的成员变量初始化!!! 
静态非final的成员变量初始化!!! 
执行要创建对象类父类的构造器!!! 
非静态非final的成员变量初始化!!! 
非静态final的成员变量初始化!!! 
执行非静态语句块!!! 
执行要创建对象类的构造器!!! 

0 0
原创粉丝点击