zoukankan      html  css  js  c++  java
  • java初始化顺序

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

    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 plain copy
     
      1. parent中static初始化块  
      2. son中的static初始化块  
      3. parent中的初始化块  
      4. parent构造方法  
      5. son中的初始化块  
      6. son构造方法  

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


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




        静态初始化块和非晶态初始化块的区别?
        非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。
        在初始化块之前有static修饰,则为静态初始化块。由于非静态成员不能再静态方法中使用,同样也不能在静态初始化块中,因此,静态初始化块主要用于初始化静态变量和静态方法,静态初始化块只调用一次,是在类的第一次加载到内存时,并非一定要创建对象才执行,
        静态初始化块比非静态初始化块先执行。
  • 相关阅读:
    【转】QPainter中坐标系变换问题
    【转】Python3 (入门6) 库的打包与安装
    【转】Python3 操作符重载方法
    【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
    正则表达式过滤HTML、JS、CSS
    JavaScript的类型转换
    JavaScript的数据类型,值和变量
    JavaScript介绍
    Ant学习笔记
    GeoServer端口配置
  • 原文地址:https://www.cnblogs.com/qianxinxu/p/7248155.html
Copyright © 2011-2022 走看看