实例变量初始化时机

2017-03-14  本文已影响35人  李霖神谷

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

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类的构造器中执行。

上一篇下一篇

猜你喜欢

热点阅读