0
点赞
收藏
分享

微信扫一扫

构造方法的小结

忆北文学摄影爱好员 2022-03-30 阅读 66

构造方法的小结

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
举报

相关推荐

0 条评论