问题一:当new一个对象,调用构造器,具体干了些什么什么?
问题二:如果是new一个子类对象,构造器又干了哪些事情。
先给出结论。
结论一:new对象的时候,构造器具体干了4件事:
1.首先在堆当中为对象分配空间。
2.在该空间中划分出属性。
3.然后对属性进行初始化。
4.最后执行程序猿在构造器中书写的代码。
结论二:new子类对象的时候,(java内存叠加机制)
先找到子类对象的父类执行父类的构造器,在堆内存中产生子类对象中的父类的那一部分,完成以后再执行子类的构造器产生子类对象特有部分,最后组成一个子类对象。//注意:至始至终只有一个子类对象
接下来进行验证,这里主要验证上述结论一中第3步,和第4步的顺序,会用到super关键字。
ok,首先来三个类,Father类,Son类,Test类。(注意这我写的这三个类是严格的java标准类)
public class Father {
private String name;
private int age;
public Father() {
System.out.println("在父类构造器无参中");
}
public Father(String name,int age) {
System.out.println("在父类的有参构造器中");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return this.name;
}
}
public class Son extends Father {private int money = this.getAge() * 100;public Son() {System.out.println("在子类构造器无参中");}public Son(String name, int age) {super(name,age);System.out.println("在子类的有参构造器中");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}}
public class Test {运行结果:
public static void main(String[] args) {
// TODO Auto-generated method stub
Son son = new Son("yangzai",22);
System.out.println(son.getMoney());
}
}
在父类的有参构造器中
在子类的有参构造器中
2200