欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实例变量初始化时机

程序员文章站 2022-03-03 11:24:42
...

从语法角度上来说,程序可以在三个地方对实例变量进行初始化
--定义实力变量时指定初始化值。
--非静态初始化快对实例变量初始化。
--构造器中对实例变量进行初始化。
其中第一个第二个要在第三个之前执行,一二两个的执行顺序与他们在源代码中的排列顺序相同。

class Cat{
    String name;
    int age;
    
    //使用构造器初始化实例变量
    public Cat(String name, int age) {
        super();
        System.out.println("执行构造器");
        this.name = name;
        this.age = age;
    }
    
    //定义时指定的值
    double weight=2.3;
    {
        System.out.println("执行非静态初始化快");
        weight=210.1;
    }
    @Override
    public String toString() {
        return "Cat [name=" + name + ", age=" + age + ", weight=" + weight + "]";
    }
    
}
public class BianliangDemo{
    public static void main(String[] args) {
        Cat c=new Cat("lishuai",18);
        System.out.println(c);
        Cat c2=new Cat("lishui",8);
        System.out.println(c2);
    }
}

每当程序调用指定的构造器来创建java对象时,该构造器必然会获得先执行的机会,除此之外,该类所包含的非静态初始化块将会获得执行机会,而且总是在构造器执行之前获得执行。

class Person{
    int count =20;
    {
        count=23;
    }
    public Person(){
        System.out.println(count);
    }
}
public class BianDemo {
    public static void main(String[] args) {
        Person p=new Person();
    }
}

count=23;这条语句会被提取到java类的构造器中执行。