Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有内部类的方法中的最终变量_Java_Variables_Inner Classes_Final - Fatal编程技术网

Java 具有内部类的方法中的最终变量

Java 具有内部类的方法中的最终变量,java,variables,inner-classes,final,Java,Variables,Inner Classes,Final,让我们看看下面的代码(让A成为同一个包中的一些简单类): 当行1编译没有问题时,行2生成以下编译错误: 在封闭范围中定义的局部变量必须是final或 有效地 将final赋值给变量i会导致第1行和第2行的编译错误(这是合理的,因为您无法更改最终变量) 第2行编译错误的原因是什么 这也会发生在下一段代码中: public class MyClass { public void outer() { A[] arr = new A[10]; for (int i

让我们看看下面的代码(让
A
成为同一个包中的一些简单类):

当行
1
编译没有问题时,行
2
生成以下编译错误:

在封闭范围中定义的局部变量必须是final或 有效地

final
赋值给变量
i
会导致第
1行和第
2行的编译错误(这是合理的,因为您无法更改最终变量)

第2行编译错误的原因是什么

这也会发生在下一段代码中:

public class MyClass {
    public void outer() {
        A[] arr = new A[10];
        for (int i=0 ; i<10 ; i++) {
            arr[i] = new A() {
                private int j = i; // 1
            };
        }
    }
}
我试图弄清楚这个编译选择背后的原因,但我无法理解它们到底是什么。我猜这与该方法可能对变量进行的更改有关,但我不确定我是否完全理解它

public class MyClass {
    public void outer() {
        A[] arr = new A[10];
        for (int i=0 ; i<10 ; i++) {
            arr[i] = new A() {
                private int j = i; // 1
            };
        }
    }
}
public class MyClass {
    public void outer() {
        A[] arr = new A[10];
        for (int i=0 ; i<10 ; i++) {
            final int k = i; // 1
            arr[i] = new A() {
                private int j = k;  // 2
            };
        }
    }
}