为什么这个显示不能引用另一方法中定义的内部类中非终态变量

img

img

img


在为按钮添加事件的时候出现了这样的报错,运行后点击按钮没有反应。问问为什么,环境配置改成了JAVASE-1.7****

声明j2,j4等变量时时给它一个final修饰符试试看,按道理是不需要的,你没有改变j2,j4的值,事实上是不可变的。
经过验证JDK1.7不够智能编译不过去,解决方案

  1. 给变量添加final修饰符,如下
    final JCheckBox j4 = new JCheckBox();
    
  2. 升级为jdk8,优选方案,目前企业主要用的JDK1.8
  3. JDK1.7编译错误提示

    img

jdk1.7确实存在这个问题,可以升级到1.8。用jdk1.8编写没有问题的,

package fx_demo;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;

public class CheckBox extends JFrame{

    private static final long serialVersionUID = -5961219595924455437L;

    public CheckBox () {
        setTitle("checkbox");
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
        
        JCheckBox j4 = new JCheckBox("选项1");
        j4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                boolean selected = j4.isSelected();
                System.out.println(selected);
            }
        });
    }
}

jdk1.7升级到1.8

加final,虽然1.8不加也行,只要真的是没有变过