假设代码是:
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] 删除。
我来说两句