java构造方法

构造方法不同于普通方法,普通方法代表对象的行为,而构造方法是提供给系统用于创建对象的方法。

构造方法(也称为构造函数)是一种特殊的方法,它具有以下特点。

  • 构造方法的方法名必须与类名相同。
  • 构造方法没有返回类型,在方法名前不声明返回类型(包括 void)。

构造方法的语法形式如下。

[访问修饰符] 类名([参数列表]) ;

虽然构造方法在语法形式上没有返回类型,但其实构造方法是有返回值的,返回的是刚刚被初始化完成的当前对象的引用。既然构造方法返回被初始化对象的引用,为什么不写返回值类型呢?例如 Student 类构造方法为什么不写成 public Student Student(参数列表){…}呢?

因为 Java 设计人员把这种方法名(类名)和返回类型的类名相同的方法看成一个普通方法,只是名称“碰巧”相同罢了,编译器识别时也会认为它是一个方法。为了和普通方法进行区别,Java 设计人员规定构造方法不写返回值,编译器通过这一规定识别构造方法,而不是说构造方法真的没有返回值

this关键字

this 是 Java 的一个关键字,它表示“指向当前对象的引用(后文简称为‘当前对象’)”。举个例子,在前面小节中给 stuAge 属性赋值的语句是wangYun.setStuAge(22);,这条语句中的当前对象就是 wangYun,因此在 setStuAge()方法中 this 就是 wangYun。

在实际开发时,this 通常用于以下两个场景。

  • 区分成员变量和局部变量,避免命名的烦恼
  • 调用其他构造方法。

先看一下如何使用 this 区分成员变量和局部变量。在前面一小节中,我们是通过以下代码给 stuAge 赋值的

private int stuAge ;
...
public void setStuAge(int age) {
...
stuAge = age ;
}

是否可以将参数 age,和成员变量 stuAge 设置为相同的名称,如下所示。

private int age ;
...
public void setAge(int age) {
...
age = age ;
}

显然,编译器将无法区分age = age这句代码中哪个变量是成员变量,哪个变量是参数,因此我们之前就只能通过不同的变量名来区分。而现在,我们就可以通过 this 来区分不同的 age,如下所示。

private int age ;
...
public void setAge(int age) {
...
this.age = age ;
}

我们再来看一下如何使用 this 调用其他构造方法。

在构造方法中,还可以使用 this 调用类中的其他构造方法,但这种this()语句必须写在构造方法的一行,如下所示。

public Student() {
        //调用有一个String参数的构造方法
        this(" WangYun" );
    }

    public Student(String name) {
        //调用有两个参数的构造方法
         this(name,23);
    }

    public Student(String name, int age) {
        ...
    }

需要注意的是,所有的构造方法之间不能循环调用,否则会出现类似“死循环”的现象。例如以上代码,如果在最后一个构造方法的第一行也加上this(),那么三个构造方法就会无限制的彼此调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值