Я покажу вам две кучки кода.Почему локальная переменная не может быть изменена во внутреннем классе?
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();
}
}
здесь я объявил одну глобальную переменную, изменила свое значение, заявил один внутренний класс и создал экземпляр этого 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();
}
}
Я сделал все шаги по первому коду e xcept здесь переменная не является глобальной, а local.Here я получаю исключение, которое говорит, что localVariable должно быть окончательным или эффективно final.I googled и понял, что именно поэтому значение получает захвачен и передается классу. Когда мы изменили его класс не знает о это меняется, и это вызывает смущение. у меня есть 2 вопроса:
1.Если это вызвать некоторые запутанным, и мы должны не изменить его после объявления почему мы не получим это исключение на глобальную переменную
2.it речь идет о значение локальной переменной меняется, поэтому мы должны получить это исключение, только если мы изменим это значение после объявления экземпляра класса. Не так ли?
Голосование для повторного открытия, поскольку я не думаю, что дубликат отвечает на его второй вопрос. – ajb
У него не должно быть вопросов, связанных с комбинацией, –