你好,
this() 作用:执行被类对象的构造方法,所以只能出现在构造方法中.
class WenTi {
public static void main(String[] args) {
new Person("张三",20).speak();
}
}
class Person{
private String name;
private int age;
public Person(){
super()------同样有默认的Object无参构造;
System.out.println("创建一个对象");
}
public Person(String name,int age){
super();----这是默认的,代表Object的无参构造;
this.name = name;
this.age = age;
this(); // 编译出错??----这里加了this(),它会再执行无参构造,
}
public void speak(){
System.out.println(name+"----"+age);
}
}
你这样写,java jvm不被允许,为什么不被允许?
请看:在你的程序中,你用了有参构造创建了对象,底层执行是:
1.先执行super()
2.再调用属性实例化对象
3.接着你的--this();这里继续调用无参构造
4.就会执行上面的无参
5.执行这个无参同样会先执行super()
在这个过程中super()被执行了了两次,就可能出错,不被jvm允许.
this()和super()都必须放在第一行,只存在于构造函数,并且不能共存....
|