2015-08-30 79 views
1

我知道了,這個問題已經被問到了,我提前再次問道,但是我無法弄清楚爲什麼會這樣的確切原因?有人可以幫我解決嗎? 對於e.g.-爲什麼在一個方法中聲明的變量需要被聲明爲final,如果它被用在同一個方法中定義的內部類中?

public class File 
{ 
    public static void main(String[] main) 
    { 
     File obj=new File(); 
     obj.method(); 
    } 
    void method() 
    { 
     for(int i=0;i<10;i++) 
     { 
      class Inner 
      { 
       void display() 
       { 
        System.out.println("i is : "+i); //Gives error,i needs to be declared final 
       } 
      } 
      Inner cls=new Inner(); 
      cls.display(); 
     } 
    } 
} 

我的問題是 -

  • 爲什麼我需要的變量聲明最後,如果我想在 顯示(內部類的)方法來使用它?
  • 如果我想在每個 迭代中的顯示方法中顯示我,那麼我該怎麼做呢?因爲如果我聲明我是初始值爲0的最終 ,那麼我將無法迭代它。

感謝.....

+0

如果你知道你要問的問題是重複的,你必須解釋爲什麼**重複不解決您的問題問題本身。** – durron597

回答

1

1)該變量必須是最後的或有效的,因爲安全原因最後。如果使用該對象修改傳遞的對象怎麼辦?

2)你必須在課堂中移動你的for循環。沒有別的辦法。

內部類只是想使用實例成員,只是使用它們,這是在內部類中可以做的唯一事情。你沒有任何指令。爲了實現這一功能,Java制定了最終或有效的最終規則。

好吧,讓我們來看看當你製作變量final時會發生什麼?

這些final變量的所有副本都將被內部類使用,而不是實際的變量。

如果沒有聽說過這個詞的有效最終在這裏你去:Difference between final and effectively final

+0

「有效最終」規則並不適用於Java 7及更早版本。 –

+0

另外,原因並不安全。原因是JVM不支持完全關閉。 –

相關問題