为毛加个final就不报错了。swing jf前面加上final就不报错了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/msyqmsyq/article/details/51508356 内部类 使用外部类 需要使用final 修饰。因为 有时候 内部类的作用域比外部变量的作用域大。 防止 变量改变 所以需要使用final 修饰 static final 表示常量,不能修改了 这是为了防止以下情况的发生:当你调用完这个方法的时候,这个方法中的内部类的引用被传出来了,然后你用这个引用去调用方法,执行方法的时候发现里边有一开始那个方法中定义的变量,但是那个方法在方法执行完的时候就已经消失,包括里面的变量。因此虚拟机就让这个传入的变量从一开始就被存入一个不会消失的地方--即常量池。你用的应该是jdk1.8之前的版本(传入的变量不是常量就编译报错),jdk1.8中你不把它定义成final也没事,只是在你去改变这个值的时候会给你报错,所以在内部类中也必须是常量,只不过变得智能了,你不在内部类中用他它就是正常的变量,你在内部类中用它,他就变成了常量,但是你定义了它并且去改变它,那编译器就会认为它是变量,然后你把它放在内部类中,他就会认为你代码写得有问题给你报错。他的运行机制可能被改成:内部类外的变量在传入的时候会定义一个常量去存储它,你使用的实际上是虚拟机定义的常量。而jdk1.8之前的机制是:从一开始就让它是常量,把它存到常量池中。 这个是JAVA的闭包实现的Capturing values问题,加上就好了 由java 8 开始只要这个变量在作用上相当于常量,就可以不加final 关键词了 看一个简单的String 用JEditorPane控件,来显示本地的html文件 Java(Swing)拼图游戏局域网对战版(顶者有分) java连接ORACLE数据问题 好东西大家一起分享 drawImage() 为什么第一次总画布上的问题 如何控制一个类只有10个实例?我的有怎么修改,解决有分 java or oracle 技术群 如何让swing中的JOptionDialog弹出的对话框显示的是YES 而不是“确定” 请大家谈谈关于布局的看法 有关java构造方法 求指导这个异常怎么解决
所以需要使用final 修饰
因此虚拟机就让这个传入的变量从一开始就被存入一个不会消失的地方--即常量池。
你用的应该是jdk1.8之前的版本(传入的变量不是常量就编译报错),jdk1.8中你不把它定义成final也没事,只是在你去改变这个值的时候会给你报错,所以在内部类中也必须是常量,只不过变得智能了,你不在内部类中用他它就是正常的变量,你在内部类中用它,他就变成了常量,但是你定义了它并且去改变它,那编译器就会认为它是变量,然后你把它放在内部类中,他就会认为你代码写得有问题给你报错。他的运行机制可能被改成:内部类外的变量在传入的时候会定义一个常量去存储它,你使用的实际上是虚拟机定义的常量。而jdk1.8之前的机制是:从一开始就让它是常量,把它存到常量池中。