构造方法的小结
public class Test01{
public static void main(String[] args){
Student std1=new Student();
System.out.println(std1);
}
}
class Student{
private String name;
private int age;
public Student(){}
}
通过关键字new来创建一个Student类叫做std1。这样可以编译通过,这时的打印是std1的在栈中的物理地址。
Student@15db9742
如果我们没有在Student类中写无参构造,也没有写有参构造。这时系统会给我们默认一个无参构造。
如果我们定义了一个有参构造,而没有定义无参构造,系统就不会默认设置一个无参构造,如果我们用了无参构造的方法,编译就不会通过
因此,在构造方法时,一般来说先定义一个无参构造,再去定义有参构造。
public class Test02{
public static void main(String[] args){
Student std2=new Student("ZhangSan",18);
System.out.println(std2.name);
}
}
class Student{
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name=name; //这个this.是指std2在堆中的地址,通过this.来代表这个name是std2的name。如果不加
this.age=age; //这个this.就会造成就近原则,将形参中的name赋值给他自己。造成我们无法获得std2的
} // name。
}
如果这样的话编译会不通过,因为你无法在Test02中调用到Student的name,因为他是用private修饰的,如果我们想打印出std2的名字,我们就应该这样调用:
public class Test02{
public static void main(String[] args){
Student std2=new Student("ZhangSan",18);
std2.getName();
}
}
class Student{
private String name;
private int age;
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public void getName(){
System.out.println("同学的名字是:"+this.name);
}
}
通过调用std2.getName来输出他的名字。输出结果:
同学的名字是:ZhangSan