实例变量初始化时机

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,804评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,394评论 11 349
  • 飞雪连天射白鹿,笑书神侠倚碧鸳。十四部金庸经典武侠小说中的男主角,你最喜欢谁呢? 对我来说,非令狐冲莫属。 郭靖迂...
    深怜低语阅读 8,505评论 5 21
  • 2017年2.19日7.30,相约“和宝宝一起学英文”,大家一起来学习和爱love相关的词。大家好,今天是“我的第...
    萝卜mama阅读 587评论 1 1