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这个方法;

java中的神奇"this"的更多相关文章

  1. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  2. java中实现多态的机制是什么?

    多态性是面向对象程序设计代码重用的一个重要机制,我们曾不只一次的提到Java多态性.在Java运行时多态性:继承和接口的实现一文中,我们曾详细介绍了Java实现运行时多态性的动态方法调度:今天我们再次 ...

  3. java中paint repaint update 之间的关系

    最近总结了一下java中的paint,repaint和updata三者之间的关系,首先咱们都知道用paint方法来绘图,用repaint重绘,用update来写双缓冲.但是他们之间是怎么来调用的呢,咱 ...

  4. Groovy中那些神奇注解之InheritConstructors

    上一篇:Groovy中那些神奇注解之ToString 写完ToString,本来想今天就写到这了,突然觉得InheritConstructors注解实在也是个神器,写起来也没多少字,还是写了吧. In ...

  5. Groovy中那些神奇注解之ToString

    继续上一篇:Groovy中那些神奇注解之Memoized 这篇就讲讲@groovy.transform.ToString这个注解,这注解太熟悉了,熟悉到让人一看就知道是干吗的,不就是把Bean转在St ...

  6. java中接口之间的继承

    最近在读一些源码的时候突然发现了一个很神奇的东西,它的原始形态是这样的: 在这行代码中,BlockingDeque.BlockingQueue和Deque是三个接口.刚发现这个问题时,我是十分吃惊的, ...

  7. Java中反射与常用方法

    java通常是先有类再有对象,有对象我就可以调用方法或者属性. 反射其实是通过Class对象来调用类里面的方法.通过反射可以调用私有方法和私有属性.大部分框架都是运用反射原理.   如何获得Class ...

  8. Java中的二进制及基本的位运算

    Java中的二进制及基本的位运算 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二 ...

  9. 如何在Java中避免equals方法的隐藏陷阱

    摘要 本文描述重载equals方法的技术,这种技术即使是具现类的子类增加了字段也能保证equal语义的正确性. 在<Effective Java>的第8项中,Josh Bloch描述了当继 ...

随机推荐

  1. ES6 --- JS异步编程的几种解决方法及其优缺点

    导言: 我们都知道 JS 是单线程的,这也正是异步编程对于 JS  很重要的原因,因为它无法忍受耗时太长的操作.正因如此有一系列的实现异步的方法. 方法一  setTimeout 常用于:定时器,动画 ...

  2. 10.5-uC/OS-III内部任务(时基任务OS-TickTask())

    几乎所有的实时系统都需要有一个能提供周期性时间的时间源,叫做时基周期或系统周期. uC/OS-III的时基周期处理程序封装在OS_TICK.C文件中. OS_TickTask()任务被uC/OS-II ...

  3. 如何将wordpress所有文章批量改为已发布状态

    用wordpress建站的一个好处就是bd站长工具平台上有数据结构插件,可以认为bd默认支持wp发展,另外一种建站程序是discuz.我们在用wordpress发布文章时,特别是那种多用户投稿的文章一 ...

  4. Linux ls 排序

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hongweigg/article/details/37693029 在Linux中查看文件,有时须要 ...

  5. 各大知名区块链交易所链接及API文档链接

    区块链交易所链接 火币网(Huobi):https://www.huobi.br.com/zh-cn/ API文档:https://github.com/huobiapi/API_Docs/wiki ...

  6. NancyFx-打造小型 WebAPI 與 Microservice 的輕巧利器

    https://github.com/NancyFx/Nancy 在做非網站系統整合時,我很愛用一招:寫個 Process 提供 WebAPI 介面給其他系統呼叫,不管你用什麼烏語言鬼平台,怎麼可能找 ...

  7. oralce 批量更新

    <update id="batchUpdateCompensatoryData" parameterType="java.util.List"> & ...

  8. PLSQL的SQL%NOTFOUND的使用场景

    SELECT * INTO v_ticketStorageRow FROM BDM_TICKET_STORAGE WHERE p_startTicketNo >= START_NO_ AND p ...

  9. git push 报错:you are not allowed to upload merges

    git rebase Cannot rebase: You have unstaged changes. git stash # 每次 push 前 git pull --rebase git pus ...

  10. TextCNN

    一.什么是TextCNN? 将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性. 二.Tex ...