public class Person{
private String name;
private int age;
public Person(){}
public Person(String name){
this.name=name;
}
public Person(int age){
this.age=age;
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void display(){
System.out.println("Name:"+name+"\tAge:"+age);
}
public static void main(String[] args){
Person p1=new Person("Tom");
p1.display();
    p1=new Person(30);
    p1.display();
p1=new Person("Billy",33);
p1.display();
}
}
运行结果为什么是:
Name:Tom        Age:0
Name:null       Age:30
Name:Billy      Age:33
而不是:
Name:Tom        Age:0
Name:Tom      Age:30
Name:Billy      Age:33
怎样调用构造函数会更好些?
先谢谢大家了!!!

解决方案 »

  1.   

    public void setAge(int age){this.age =age;}Person p1 = new Person("Tom"); 
    p1.display();         // Name:Tom Age:0
    p1.setAge(30);     
    p1.display();         //Name:Tom Age:30
      

  2.   

    1、如果是引用型的,比如:String,还有类对象,他们的默认值都是:null;
    2、而如果是值类型:double,int,long,float,char等等,他们都是:0;
    运行结果为什么是: 
    Name:Tom        Age:0 
    调用public Person(String name){ 
    this.name=name; 
    }这个构造方法,只传1个参数,另一个参数 age默认值为0,Name:null      Age:30 
    调用public Person(int age){ 
    this.age=age; 
    } 这个构造方法,只传1个参数,另一个参数默认值为nullName:Billy      Age:33 
    调用public Person(String name,int age){ 
    this.name=name; 
    this.age=age; 
    }这个构造方法,2个参数都传入
      

  3.   

    每new一个对象都会在堆区占用一定的空间,每个对象都有自己的name和age属性。第一次创建的对象与第二个创建的对象之间是没有影响的。
      

  4.   

    public static void main(String[] args){ 
    Person p1=new Person("Tom"); 
    p1.display(); 
        p1=new Person(30); 
        p1.display(); 
    p1=new Person("Billy",33); 
    p1.display(); 
    把p1=new Person(30); 改为p1=new Person(("Tom",30); 即可。原因从这里你就可以体会一下