如果要在同一方法中定义的内部类中使用,则为什么在方法内声明的变量需要声明为final?

时间:2015-08-30 03:04:19

标签: java loops nested outer-join

我知道,这个问题已经被问过了,我再次向你道歉,但我无法弄清楚为什么会这样呢?有人可以帮我解决一下吗? 例如.-

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();
        }
    }
}

我的问题是 -

  • 为什么我需要将变量i声明为final,如果我想在其中使用它 Inner class的display()方法?
  • 如果我想在每个显示方法中显示i 迭代,然后我该怎么办?因为如果我宣布我是最终的 初始值为0,那么我将无法迭代它。

谢谢......

1 个答案:

答案 0 :(得分:1)

1)由于安全原因,该变量需要是最终的或有效的。如果对象用于修改传递的对象怎么办?

2)你必须在课堂内移动你的for循环。别无他法。

内部类只想使用实例成员,只需使用它们,这是你在内部类中唯一可以做的事情。你没有命令。为了实现这一功能,Java制定了最终或有效的最终规则。

好的,让我们看一下变量final时会发生什么?

这些final变量的所有副本将由内部类使用,而不是实际的变量。

如果你没有在这里听到有效的最后一句,你可以去:Difference between final and effectively final