java中的神奇this
java中的神奇"this",神奇的原因事它能不用new就可以直接創(chuàng)造一個(gè)對(duì)象出來(lái),后來(lái)研究發(fā)現(xiàn),其實(shí)java的“this”使用時(shí),也是"new"了一個(gè)當(dāng)前的對(duì)象,不過(guò)這些操作我們看不到,因?yàn)槠鋵?shí)是虛擬機(jī)jvm幫我們"new"了;
方法體中,有和成員變量重名的局部變量,啥都不加訪問(wèn)的是局部變量,this點(diǎn)出來(lái)的是成員變量,super點(diǎn)出來(lái)的是其父類的同名成員變量;
記錄一個(gè)有趣的錯(cuò)誤:
// 咨詢回復(fù)內(nèi)容public String answer = "";// 咨詢回復(fù)時(shí)間public String answerDate = "";// 咨詢回復(fù)內(nèi)容public String getAnswer() {return answer;}public void setAnswer(String answer) {answer = StringUtil.isBlank(answer) ? "" : answer;}// 咨詢回復(fù)時(shí)間public String getAnswerDate() {return answerDate;}public void setAnswerDate(String answerDate) {answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;}其中,這是一個(gè)類中定義了兩個(gè)成員變量,自己手動(dòng)加了對(duì)應(yīng)的構(gòu)造方法,以變量 answe 為例,在它的set方法中,方法體中的answer變量實(shí)際是它的入?yún)?#xff0c;而不是這個(gè)類定義的那個(gè)成員變量,這樣在調(diào)用這個(gè)類,然后點(diǎn)set設(shè)置其這個(gè)屬性值的時(shí)候會(huì)一直是空,接口傳回頁(yè)面的值自然也是空,調(diào)試如圖:
?
問(wèn)題就是出在沒(méi)有使用神奇的“this”,因?yàn)橹笆鞘謩?dòng)加了對(duì)應(yīng)的構(gòu)造方法,變量名都是直接賦值的類定義的成員變量,現(xiàn)在用快捷鍵自動(dòng)為這兩個(gè)成員變量添加set和get構(gòu)造方法:
添加后的構(gòu)造方法是:
// 咨詢回復(fù)public String getAnswer() {return answer;}public void setAnswer(String answer) {this.answer = StringUtil.isBlank(answer) ? "" : answer;}// 咨詢回復(fù)時(shí)間public String getAnswerDate() {return answerDate;}public void setAnswerDate(String answerDate) {this.answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;}其中,還是以 answer 變量為例,構(gòu)造方法的方法體中,加了“this”之后就變成了這個(gè)類的成員變量,后面進(jìn)行非空判斷規(guī)避異常的處理中的 answer 變量就是該方法的入?yún)⒘?#xff0c;區(qū)別就是這個(gè);
這時(shí)候再通過(guò)調(diào)用接口,前端調(diào)試:
就是可以調(diào)用這個(gè)類的成員變量的get/set構(gòu)造方法進(jìn)行獲取和賦值了;
它的機(jī)制原理就是在”this“的時(shí)候jvm會(huì)自動(dòng)"new"一個(gè)這個(gè)類的實(shí)例,然后點(diǎn)set這個(gè)方法;
轉(zhuǎn)載于:https://www.cnblogs.com/wmqiang/p/10557570.html
總結(jié)
以上是生活随笔為你收集整理的java中的神奇this的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 爬虫(1)
- 下一篇: 点评----和时代专线