美文网首页
实例变量初始化时机

实例变量初始化时机

作者: 李霖神谷 | 来源:发表于2017-03-14 16:13 被阅读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类的构造器中执行。

    相关文章

      网友评论

          本文标题:实例变量初始化时机

          本文链接:https://www.haomeiwen.com/subject/xirhnttx.html