栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中创建新对象时变量初始化和构造函数调用的顺序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中创建新对象时变量初始化和构造函数调用的顺序

class Animal {
    String brain = "动物大脑";
    String heart = "动物心脏";
    public static int animalCount = 7700000;
    public Animal(String brain, String heart) {
        System.out.println("Animal 类中:");
        System.out.println("Animal 构造函数正在运行!");
        System.out.println("Animal 的类变量是否初始化?");
        System.out.println("animalCount = " + animalCount);
        System.out.println("现在的 brain = " + this.brain);
        System.out.println("现在的 heart = " + this.heart);
        System.out.println("Cat类中的类变量是否初始化?");
        System.out.println("catCount = " + Cat.catCount);
        this.brain = brain;
        this.heart = heart;
        System.out.println("brain = " + this.brain);
        System.out.println("heart = " + this.heart);
    }
}
public class Cat extends Animal {
    String tail = "猫初始值的尾巴";
    static int catCount = 37;
    public Cat(String brain, String heart, String tail) {
        super(brain, heart);
        System.out.println("Cat 类中:");
        System.out.println("Cat 构造函数已经启动,super调" +
                "用Animal构造函数初始化变量");
        System.out.println("现在的  catCount = " + catCount);
        System.out.println("tail = " + this.tail);
        this.tail = tail;
        System.out.println("赋值后的 tail = " + this.tail);
    }

    public static void main(String[] args) {
        Cat cat = new Cat("猫对象大脑", "猫对象心脏", "猫对象尾巴");
    }
}

输出:
Animal 类中:
Animal 构造函数正在运行!
Animal 的类变量是否初始化?
animalCount = 7700000
现在的 brain = 动物大脑
现在的 heart = 动物心脏
Cat类中的类变量是否初始化?
catCount = 37
brain = 猫对象大脑
heart = 猫对象心脏
Cat 类中:
Cat 构造函数已经启动,super调用Animal构造函数初始化变量
现在的 catCount = 37
tail = 猫初始值的尾巴
赋值后的 tail = 猫对象尾巴

所以顺序为:

  1. 父类(Animal)静态变量初始化,本例中 animalCount = 770000;
  2. 子类(Cat)静态变量初始化; 本例中catCount = 37;
  3. 然后初始父类的非静态变量。我们专门为它们分配了初始值,然后在构造函数中替换它们。Animal 的构造函数还没有完成,但是 Brain 和 heart 的初始值已经赋值了(现在的 brain = 动物大脑,现在的 heart = 动物心脏);
  4. 父类构造函数启动;
  5. 子类( Cat) 的非静态字段被初始化,这发生在Cat构造函数开始运行之前,当它开始运行时,tail 变量已经有了一个值(tail = 猫父类尾巴);
  6. Cat子类的构造函数被调用
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/673000.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号