天天看點

JAVA錯誤:Cannot refer to a non-final variable * inside an inner class defined in a different method

  在使用Java局部内部類或者内部類時,若該類調用了所在方法的局部變量,則該局部變量必須使用final關鍵字來修飾,否則将會出現編譯錯誤“Cannot refer to a non-final variable * inside an inner class defined in a different method” 下面通過一段代碼來示範和分析原因。

​​

JAVA錯誤:Cannot refer to a non-final variable * inside an inner class defined in a different method
JAVA錯誤:Cannot refer to a non-final variable * inside an inner class defined in a different method

       上面代碼若去掉第9行和第14行的注釋符号,則第14行就會給出“Cannot refer to a non-final variable * inside an inner class defined in a different method”這樣的編譯錯誤。原因如下:在方法中定義的變量是局部變量,當方法傳回時,局部變量(str1,str2)對應的棧就被回收了,當方法内部類去通路局部變量時就會發生錯誤。當在變量前加上final時,變量就不在是真的變量了,成了常量,這樣在編譯器進行編譯時(即編譯階段)就會用變量的值來代替變量,這樣就不會出現變量清除後,再通路變量的錯誤。