Java:为什么我不能在任何类中使用final来访问局部变量JPanel?

张保罗:

假设代码是:

public class Test {
    public void test() {
        JPanel panel = new JPanel();
        int a;
        JLabel label = new JLabel();
        label.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                panel.setBackground(Color.BLACK); // Correct
                a = 0; // Wrong, should be final
            }
        });
    }
}

这使我感到困惑,为什么我可以不使用JPanel访问final

他们是 :

该声明

panel.setBackground(Color.BLACK);

不会为局部变量赋值(匿名类方法中不允许这样做)。它使panel变量引用的实例的状态发生变化,这是允许的。

该声明

a = 0; 

不允许尝试向本地变量分配新值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何通过将局部变量存储到Java Android中的类变量(全局)来访问局部变量

为什么我不能使用结构变量 S 来访问成员

为什么我不能在Chrome中使用contentDocument来访问SVG文件,但是在Firefox中却可以呢?

为什么我们不能使用超类的引用变量来访问其子类的方法(超类中没有的方法)?

为什么不能在回调中使用局部变量?

为什么我不能在任何方法之外修改类成员变量?

为什么不能在ngAfterViewInit函数中访问局部变量?

在类构造函数中,为什么“这是必需的”?为什么我不能使用局部变量?

如何使用函数对象作为自定义比较器来访问局部变量而不是在 C++ 中使用 lambda 函数?

为什么使用getter方法时,我们可以直接使用setter方法来访问私有变量在Java中?

为什么我不能在类方法中使用预定义变量?

为什么匿名类能够访问局部变量

为什么我不能在匿名类中使用<Class> .this?

当MethodHandle更快时,为什么要使用反射来访问类成员?

为什么我不能在任务中使用Capistrano的info方法?

为什么我们不能用从类型变量未初始化的局部变量访问静态内容?

为什么我需要使用额外的 `::` 前缀来访问导入的结构?

为什么我需要使用“ this”来访问地图中的值?

为什么在React功能组件中使用局部变量?

为什么使用{}来访问std :: hash中的operator()?

为什么我们不能通过未初始化的局部变量访问静态内容?

为什么要在构造函数中实例化变量,以及为什么要使用属性来访问变量

为什么VS Compiler不能在C ++上自动初始化局部变量?

为什么我不能在任何类型的设备上运行我想要的任何软件?

为什么我们使用另一个继承活页夹类的类来访问BoundServices?

为什么我们不能在Kotlin的Singleton类(对象)中使用受保护的访问修饰符

为什么我不能在Flow API Subscriber中从onComplete访问类变量

使用过程来访问变量

为什么我不能在班级中访问变量。Python