gpt4 book ai didi

java - 方法局部内部类访问方法的局部变量

转载 作者:行者123 更新时间:2023-12-02 02:18:16 24 4
gpt4 key购买 nike

嗨,我正在阅读 SCJP 关于内部类的书,发现了这个声明,它的内容是这样的。

A method local class can only refer to the local variables which are marked final

并且在解释中指定的原因是关于本地类对象和堆上的本地变量的范围和生命周期,但我无法理解这一点。我是否遗漏了有关 final 的任何内容?

最佳答案

原因是,当创建方法局部类实例时,它引用的所有方法局部变量实际上都被编译器复制到其中。这就是为什么只能访问 final 变量。 Final 变量或引用是不可变的,因此它与方法本地对象中的副本保持同步。如果不是这样,则在创建方法本地类后,原始值/引用可能会发生更改,从而导致令人困惑的行为和微妙的错误。

考虑 JavaSpecialist newsletter no. 25 中的这个示例:

public class Access1 {
public void f() {
final int i = 3;
Runnable runnable = new Runnable() {
public void run() {
System.out.println(i);
}
};
}
}

编译器将内部类变成这样:

class Access1$1 implements Runnable {
Access1$1(Access1 access1) {
this$0 = access1;
}
public void run() {
System.out.println(3);
}
private final Access1 this$0;
}

Since the value of i is final, the compiler can "inline" it into the inner class.

关于java - 方法局部内部类访问方法的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com