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

时间:2010-09-15 10:49:58

标签: java android eclipse

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

public static void myfunc(Context ctx, int a)  
{                                     
  Context myctx=ctx;                      
}     

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

4 个答案:

答案 0 :(得分:7)

不一定。你可以在静态函数中有一个非final变量。

经典示例:

public static void main(String args[])
{
   int i = 10;
} 

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:2)

不,事实并非如此。 您可以在静态方法中创建非最终变量。

答案 3 :(得分:1)

如果你声明一个变量然后不要修改它,它可能会被触发。

建议通过将其声明为final,允许某些JVM优化。