java类的成员初始化顺序和初始化块知识

来源:互联网 发布:edius视频编辑软件 编辑:程序博客网 时间:2024/05/19 00:55

属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。

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

执行结果:

[plain] view plaincopyprint?
  1. parent中static初始化块  
  2. son中的static初始化块  
  3. parent中的初始化块  属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:
    1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
    2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
    3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    4.执行父类的构造方法。
    5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
    6.执行子类的构造方法。



    [java] view plaincopy
    01.public class Test {
    02. /**
    03. * Description
    04. * @param args
    05. */
    06. public static void main(String[] args) {
    07. Son s = new Son();
    08. }
    09.
    10.}
    11.
    12.class Parent{
    13.
    14. {
    15. System.out.println("parent中的初始化块");
    16. }
    17. static{
    18. System.out.println("parent中static初始化块");
    19. }
    20.
    21. public Parent(){
    22. System.out.println("parent构造方法");
    23. }
    24.}
    25.
    26.class Son extends Parent{
    27. {
    28. System.out.println("son中的初始化块");
    29. }
    30.
    31. static{
    32. System.out.println("son中的static初始化块");
    33. }
    34.
    35. public Son(){
    36. System.out.println("son构造方法");
    37. }
    38.
    39.}


    执行结果:




    [plain] view plaincopy
    01.parent中static初始化块
    02.son中的static初始化块
    03.parent中的初始化块
    04.parent构造方法
    05.son中的初始化块
    06.son构造方法


    初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他的类的功能。
    初始化块和构造方法功能类似,可以再创建对象的时候完成一些初始化的操作,一般的情况下,构造方法初始化和初始化块初始化可以通用。


    构造方法在初始化的时候可以通过参数船只,但是初始化块不能,初始化块的初始化在构造方法之前执行,如果搞糟方法多次重载,此时可以考虑构造方法中共通的代码放到初始化块中进行初始化。




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

初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他的类的功能。
初始化块和构造方法功能类似,可以再创建对象的时候完成一些初始化的操作,一般的情况下,构造方法初始化和初始化块初始化可以通用。


构造方法在初始化的时候可以通过参数船只,但是初始化块不能,初始化块的初始化在构造方法之前执行,如果搞糟方法多次重载,此时可以考虑构造方法中共通的代码放到初始化块中进行初始化。




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

0 0
原创粉丝点击