java类初始化顺序

Posted 溜了溜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类初始化顺序相关的知识,希望对你有一定的参考价值。

public class InitializeBlockDemo {


    public static void main(String[] args) {
        
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        
        obj=new InitializeBlockClass(300);
        System.out.println(obj.field);
    }

}

class InitializeBlockClass{
    //下面这句在初始化块之前与之后,会影响到field字段的初始值
    //public int field=100;
    
    {
        field=200;
    }//初始化块
    public int field=100;
    public InitializeBlockClass(int value){
        this.field=value;
    }
    public InitializeBlockClass(){
        
    }
}

上面一段代码,执行结果上会因为类的“初始化块”和“成员定义时的初始化”位置不同而导致其运行结果不同,这就证明了在java类中初始化块与成员定义时的初始化并不存在执行优先级的区分,而是根据他们位置执行,实例成员的值会是最后运行的部分所赋予的值。

以上是关于java类初始化顺序的主要内容,如果未能解决你的问题,请参考以下文章

java类加载顺序

Java 的类加载顺序

java类加载机制&初始化顺序

一文详解:Java中父子类静态块构造块构造方法成员变量之间的初始化先后顺序与执行先后顺序

Java对象实例化顺序

Java类成员初始化顺序