2つのコードバンチを表示します。ここ 内部クラスでローカル変数を変更できないのはなぜですか?
public class A {
int globalVariable;
public void foo() {
globalVariable++;
class B {
void foo() {
System.out.println(globalVariable);
}
}
B b = new B();
b.foo();
}
public static void main(String[] args) {
A a = new A();
a.foo();
}
}
iは、一つのグローバル変数を宣言し、その値を変更し、1つの内部クラスを宣言し、うまく動作し、今
を印刷します。このclass.Thisコードのインスタンスを作成しましたこのコードをチェックアウト:
public class A {
public void foo() {
int localVariable;
localVariable++;
class B {
void foo() {
System.out.println(localVariable);
}
}
B b = new B();
b.foo();
}
public static void main(String[] args) {
A a = new A();
a.foo();
}
}
ここで変数はグローバルではなくローカルです。ここでは、localVariableはfinalまたは実質的にfinalでなければならないという例外があります。私はグーグルでこれがなぜキャプチャされてclass.Whenに渡されたのか理解しています変化し、混乱を招く。 私は2つの質問があります:
それはいくつかの混乱を引き起こす1.ifをして
2.itそれは程度である私たちは、グローバル変数にこの例外を取得しない理由を宣言 後にそれを変更しないする必要がローカル変数の値が変わるので、クラスインスタンス宣言後にこの値を変更した場合にのみ、この例外を取得する必要があります。それはありませんか?
私は重複が彼の2番目の質問に答えるとは思わないので、再度開く投票。 – ajb
彼は組み合わせの質問ではなく、1つの投稿につき1つの質問 –