为什么静态方法中的变量应该在java中声明为final

And*_*ice 1 java eclipse android

我有一个静态方法.在我decalare变量的方法中,它在eclipse中显示一个错误,说该变量应该被decalared为final.我能否知道这个的原因,如果静态方法中的变量被声明为final?我正在编写一个Android应用程序,我应该将该应用程序的当前Context作为参数传递.因此,当我将当前上下文传递给方法并尝试将其复制到局部变量中时,我收到此错误,说该变量应声明为final.我的方法是这样的:

public static void myfunc(Context ctx, int a)  
{                                     
  Context myctx=ctx;                      
}     
Run Code Online (Sandbox Code Playgroud)

错误显示在Context myctx = ctx的行; 宣布并要求我宣布它为最终决定.

Dhe*_*shi 7

不必要.您可以在静态函数中包含非final变量.

经典例子:

public static void main(String args[])
{
   int i = 10;
} 
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 6

编译器的常规设置不会这样做.你没有被迫宣布它是最终的.

有第三方工具(如checkstyle和pmd)可以添加错误和警告.在这种情况下,变量在方法中没有其他地方改变,因此可以声明它final

如果你在变量下面实例化了一个匿名类,并在那里使用变量(但你没有向我们展示) - 那么它必须被声明为final.