1. 程式人生 > >Java 內部類呼叫外部類方法的一個注意點

Java 內部類呼叫外部類方法的一個注意點

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



 

打印出來的結果為:

a: 20
a: 0
a: 20

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



 



 

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

  • 35d19f13-a812-3db6-97f7-c16a95dcfb2c-thumb.jpg
  • 大小: 32.9 KB
  • 1ac1d60a-29ae-3fe7-b527-3d676aa4fcb6-thumb.jpg
  • 大小: 137.4 KB
  • f42ac439-d114-3ad0-a0b6-d76e2935bc2e-thumb.jpg
  • 大小: 120.4 KB