JAVA基础准备要点---(JAVA初始化顺序)

来源:互联网 发布:windows文件夹监控 编辑:程序博客网 时间:2024/05/21 22:47


JAVA初始化顺序

三个原则(优先级依次递减):
1,静态对象(变量)优先于非静态对象(变量)的初始化。
2,父类优先于子类进行初始化。
3,按照成员变量的定义顺序。

属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:

1.父类静态变量。

2.父类静态代码块

3.子类静态变量

4.类静态代码块

5.父类非静态变量

6.父类非静态代码块

7.父类构造函数。

8.子类非静态变量。

9.静态代码块。

10.子类构造函数。

[java] view plain copy
  1. public class Test {  
  2.      
  3.     public static void main(String[] args) {  
  4.         Son s = new Son();  
  5.     }  
  6.   
  7. }  
  8.   
  9. class Parent{  
  10.   
  11.     {  
  12.         System.out.println("parent中的初始化块");  
  13.     }  
  14.     static{  
  15.         System.out.println("parent中static初始化块");  
  16.     }  
  17.       
  18.     public Parent(){  
  19.         System.out.println("parent构造方法");  
  20.     }  
  21. }  
  22.   
  23. class Son extends Parent{  
  24.     {  
  25.         System.out.println("son中的初始化块");  
  26.     }  
  27.       
  28.     static{  
  29.         System.out.println("son中的static初始化块");  
  30.     }  
  31.       
  32.     public Son(){  
  33.         System.out.println("son构造方法");  
  34.     }  
  35.       
  36. }  

执行结果:

[plain] view plain copy
  1. parent中static初始化块  
  2. son中的static初始化块  
  3. parent中的初始化块  
  4. parent构造方法  
  5. son中的初始化块  
  6. son构造方法  


静态初始化块和非静态初始化块的区别?
非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。
在初始化块之前有static修饰,则为静态初始化块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法,静态初始化块只调用一次,是在类的第一次加载到内存时,并非一定要创建对象才执行,
静态初始化块比非静态初始化块先执行。