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
總結
以上是生活随笔為你收集整理的java中的神奇this的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫(1)
- 下一篇: 点评----和时代专线