java中的神奇this

java中的神奇"this",神奇的原因事它能不用new就可以直接创造一个对象出来,后来研究发现,其实java的“this”使用时,也是"new"了一个当前的对象,不过这些操作我们看不到,因为其实是虚拟机jvm帮我们"new"了;

方法体中,有和成员变量重名的局部变量,啥都不加访问的是局部变量,this点出来的是成员变量,super点出来的是其父类的同名成员变量;

记录一个有趣的错误:

 // 咨询回复内容public String answer = "";// 咨询回复时间public String answerDate = "";// 咨询回复内容public String getAnswer() {return answer;}public void setAnswer(String answer) {answer = StringUtil.isBlank(answer) ? "" : answer;}// 咨询回复时间public String getAnswerDate() {return answerDate;}public void setAnswerDate(String answerDate) {answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;}

其中,这是一个类中定义了两个成员变量,自己手动加了对应的构造方法,以变量 answe 为例,在它的set方法中,方法体中的answer变量实际是它的入参,而不是这个类定义的那个成员变量,这样在调用这个类,然后点set设置其这个属性值的时候会一直是空,接口传回页面的值自然也是空,调试如图:

 

问题就是出在没有使用神奇的“this”,因为之前是手动加了对应的构造方法,变量名都是直接赋值的类定义的成员变量,现在用快捷键自动为这两个成员变量添加set和get构造方法:

添加后的构造方法是:

    // 咨询回复public String getAnswer() {return answer;}public void setAnswer(String answer) {this.answer = StringUtil.isBlank(answer) ? "" : answer;}// 咨询回复时间public String getAnswerDate() {return answerDate;}public void setAnswerDate(String answerDate) {this.answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;}

其中,还是以 answer 变量为例,构造方法的方法体中,加了“this”之后就变成了这个类的成员变量,后面进行非空判断规避异常的处理中的 answer 变量就是该方法的入参了,区别就是这个;

这时候再通过调用接口,前端调试:

就是可以调用这个类的成员变量的get/set构造方法进行获取和赋值了;

它的机制原理就是在”this“的时候jvm会自动"new"一个这个类的实例,然后点set这个方法;

转载于:https://www.cnblogs.com/wmqiang/p/10557570.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部