您的位置:首页 > 编程语言 > Java开发

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

2016-10-11 00:03 204 查看
属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:

1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。

2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。

3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。

4.执行父类的构造方法。

5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。

6.执行子类的构造方法。

[java]
view plain
copy

public class Test {  
    /** 
     * Description 
     * @param args 
     */  
    public static void main(String[] args) {  
        Son s = new Son();  
    }  
  
}  
  
class Parent{  
  
    {  
        System.out.println("parent中的初始化块");  
    }  
    static{  
        System.out.println("parent中static初始化块");  
    }  
      
    public Parent(){  
        System.out.println("parent构造方法");  
    }  
}  
  
class Son extends Parent{  
    {  
        System.out.println("son中的初始化块");  
    }  
      
    static{  
        System.out.println("son中的static初始化块");  
    }  
      
    public Son(){  
        System.out.println("son构造方法");  
    }  
      
}  

执行结果:

[plain]
view plain
copy

parent中static初始化块  
son中的static初始化块  
parent中的初始化块  
parent构造方法  
son中的初始化块  
son构造方法  

初始化块主要用于对象的初始化操作,在创建对象时调用,可以用于完成初始化属性值、加载其他的类的功能。

初始化块和构造方法功能类似,可以再创建对象的时候完成一些初始化的操作,一般的情况下,构造方法初始化和初始化块初始化可以通用。

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

静态初始化块和非晶态初始化块的区别?

非静态初始化块主要是用于对象的初始化操作,在每次创建对象的时都要调用一次,其执行顺序在构造方法之前。

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

静态初始化块比非静态初始化块先执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: