天天看點

Java 内部類調用外部類方法的一個注意點

今天在寫代碼的時候,涉及到使用一個内部類去調用外部類方法的問題,總是得不到我想要的結果,後經過DEBUG,才發現哪裡出現了問題。現寫了一個簡單的代碼,來重制這個問題。

Java 内部類調用外部類方法的一個注意點

列印出來的結果為:

a: 20
a: 0
a: 20
           

 為什麼是這麼一個結果呢?我想,對第一個 20,大家應該沒有任何意見吧。那麼第二個為什麼是 0 呢?我一開始一直以為列印出來的應該是 20,是以一直沒想通,但看了以下兩張 DEBUG 的圖之後,大家應該明白為什麼了吧。請注意圖中的斷點,與相應的 InnerClassDemo 的 id。

Java 内部類調用外部類方法的一個注意點
Java 内部類調用外部類方法的一個注意點

回過頭來看第一張圖: ② 對應的 InnerClass 中的 test() 方法實際上調用的是 ① 對應的 InnerClassDemo 的 print(),且此時它的 a 的值仍為 0, 而 ④ 對應的InnerClass 中的 test() 方法實際上調用的是 ③ 對應的 InnerClassDemo 的 print(),而它的 a 的值已經經過 setA() 被指派為了 20。是以,才會出現上面的列印結果。