博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造函数中为什么要用this关键字?
阅读量:3522 次
发布时间:2019-05-20

本文共 1940 字,大约阅读时间需要 6 分钟。

看如下代码:

package com.lichkin.chot.bean.out.ocLightOn.ct1YieldReport;import java.util.ArrayList;import java.util.List;import lombok.Getter;import lombok.Setter;@Getter@Setterpublic 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关键字指定访问成员变量的数据。对于这个例子,我们在调用的时候是需要用到成员变量的数据,而非局部变量的数据。

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

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

 

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

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

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

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

 

转载地址:http://wueqj.baihongyu.com/

你可能感兴趣的文章
ElasticSearch(0) ES的认识
查看>>
JPA入门
查看>>
JPA关系
查看>>
4.spring注解和生命周期相关的(了解)
查看>>
3.spring 的纯注解配置
查看>>
4.Spring 整合 Junit
查看>>
安装配置 Kali Linux 笔记
查看>>
持久加密U盘安装 Kali Linux 笔记
查看>>
[ 笔 记 ] netcat 传输信息 / banner
查看>>
[ 笔 记 ] 主动信息收集_002
查看>>
[ CTF ] ssh私钥泄漏_笔记
查看>>
设计模式学习
查看>>
操作系统学习总结
查看>>
Java JSON字符串与自定义类/基本类型相互转换
查看>>
Java中时间戳和时间格式的转换
查看>>
Dubbo基础知识整理
查看>>
计算机网络知识整理
查看>>
Java基础知识
查看>>
操作系统知识整理
查看>>
实现自己的权限管理系统(二):环境配置以及遇到的坑
查看>>