构造函数中为什么要用this关键字?

简介: 构造函数中为什么要用this关键字?
package com.lichkin.chot.bean.out.ocLightOn.ct1YieldReport;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Ct1YieldGridBean {
  private String prodId;
  private String prodDsc;
  private String opeId;
  private String prodSize;
  private Integer totalPanelQty = 0;
  private Integer topN;
  private  String qtap; //
  private String qtapDate;
  private String qtapType;
  private String qtapLineId;
  public Ct1YieldGridBean() {
  }
  public Ct1YieldGridBean(String prodId, String prodDsc, String opeId, String prodSize,String qtap ) {
    this.prodId = prodId;
    this.prodDsc = prodDsc;
    this.opeId = opeId;
    this.prodSize = prodSize;
    this.qtap = qtap;
  }
  public Ct1YieldGridBean(String prodId, String prodDsc, String opeId, String prodSize,String qtap,String qtapDate,String qtapType,String qtapLineId ) {
    this.prodId = prodId;
    this.prodDsc = prodDsc;
    this.opeId = opeId;
    this.prodSize = prodSize;
    this.qtap = qtap;
    this.qtapDate = qtapDate;
    this.qtapType = qtapType;
    this.qtapLineId = qtapLineId;
  }

可以看到该类中共有三个构造函数。


有几个细节问题需要注意:

1. 构造函数是没有返回值类型的。

2. 构造函数的函数名必须 与类名一致。

3. 构造函数并不是由我们手动调用的, 构造函数是在创建对应对象的时候由jvm主动调用的(每创建一个对象就会调用一次构造函数)。

      Note:构造函数的调用必须用new关键字来调用,例如:

yieldGridDataList.add(new Ct1YieldGridBean(bean.getProdId(), bean.getProdDsc(), bean.getOpeId(), bean.getProdSize(),bean.getLcdLot(),bean.getQtapDate(),bean.getQtapType(),bean.getQtapLineId()));

4. 如果一个类没有显式的添加一个构造函数,那么java编译器会为该类添加一个无参的构造函数。

   Note:例如上面代码中的第一个构造函数。

5. 如果一个类已经显式的添加一个构造函数,那么java编译器则不会再为该类添加一个无参的构造函数。

6. 构造函数是可以以函数重载的形式存在多个的。

  Note: 上面的第2 和 3就是以函数重载的形式存在的。


那为什么构造函数中的变量(严格来说应该是局部变量)为什么需要用this关键字指向呢?


拿prodId来说,成员变量和构造函数中的局部变量同名

存在着同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,如何才能访问成员变量呢?

this关键字可以解决这个问题,可以通过this关键字指定访问成员变量的数据。对于这个例子,我们在调用的时候是需要用到成员变量的数据,而非局部变量的数据。


那为何把构造函数的形参列表的参数名命名成和成员变量不一样呢?

事实上是可以的,见下图:

20190723113043197.png

在构造函数中不需要this也可以拿到成员变量的值。个人认为使用this是为了更加简洁,规范。


关于局部变量和成员变量推荐一个博文:

https://blog.csdn.net/weixin_37012881/article/details/82699089

局部变量 : 例如实例变量 & 类变量

成员变量 : 形参 & 方法内的局部变量

目录
相关文章
|
3月前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
78 30
|
5月前
|
编译器 C++
【C++】详解构造函数
【C++】详解构造函数
|
7月前
|
编译器 C#
C#构造函数详解
C#构造函数详解
63 0
|
7月前
|
编译器 C语言 C++
你想对构造函数说些什么?
你想对构造函数说些什么?
|
安全 C#
C#视频之构造函数
C#视频之构造函数
74 0
构造函数
构造函数
61 1
|
JavaScript
6、this关键字
6、this关键字
94 0
6、this关键字
|
自然语言处理 JavaScript 前端开发
浅谈一下this关键字
浅谈一下this关键字
92 0
浅谈一下this关键字