【java】关于Cannot refer to the non-final local variable list defined in an enclosing scope解决方法
今天学习中遇到了一个问题:
Cannot refer to the non-final local variable list defined in an enclosing scope
这里的new Runnable(){...}是一个匿名局部内部类,其访问test()方法的局部变量list就会发生编译错误
解决方法:
用final修饰list
原因:
程序执行test()方法时,在方法的调用栈中生成了局部变量变量list,此时产生了一个局部内部类对象,它访问了该局部变量list,当方法test()运行结束后,局部变量list就已死亡了,不存在了,但:局部内部类对象还可能一直存在(只能没有人再引用该对象时,它才会死亡),它不会随着方法test()运行结束死亡。局部内部类对象和局部变量list的生命周期不一致,局部变量list死后,局部内部类对象不能访问一个不存在的变量。
使用final修饰符修饰局部变量list,这时的局部内部类对象将list的“复制品”作为自己的数据成员,当局部变量list死亡以后局部内部类对象依然可以访问list的“复制品”。
注意:Java8中不写final也能通过编译(会隐式的添加final)
(我的是Java7)
【java】关于Cannot refer to the non-final local variable list defined in an enclosing scope解决方法的更多相关文章
- Cannot refer to the non-final local variable user defined in an enclosing scope 内部类定义在方法内,方法定义的参数(形参)无法被内部类直接访问,需要用final定义
为什么匿名内部类参数必须为final类型 1) 从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量 ...
- Cannot refer to the non-final local variable user defined in an enclosing scope
(1)首先该错误只会在 JDK 1.7 版本及其以前如果要在匿名内部类中报出,解决办法为在传入的参数前面增加final修饰,但如果在JDK 如果变更为1.8版本及其以后,该异常就不存在了. (2)如何 ...
- Eclipse连接数据库报错Local variable passwd defined in an enclosing scope must be final or effectively final
其实原因很简单,就是翻译的结果 匿名内部类和局部内部类只能引用外部的fianl变量 把变量变成fianl就行了 第一次知道啊 记小本本.......
- 【转】The final local variable xxx cannot be assigned, since it is defined in an enclosing type
文地址:http://blog.163.com/benben_long/blog/static/199458243201481102257544/ 本文就自己编程时候遇到的一个问题,简要描述一下,并提 ...
- 错误/异常:java.io.FileNotFoundException: .\src\db.properties (系统找不到指定的路径。);的解决方法
1.异常视图 2.解决方法 与之相关的部分代码: static{ try { //读取db.properties Properties props = new Properties(); FileIn ...
- java编译报错: 找不到或无法加载主类 Demo.class 的解决方法
原因:java 命令后面的文件不能有后缀名. 解决方法:运行java时候,后面的文件去掉后缀名.
- JAVA中 错误代码是 the public type must be defined in its own file 解决方法 android开发 java编程
一般是由于定义的JAVA类同文件名不一致: 解决方法: 1.把文件名修改同XYZ一样的名字: 2.把类名修改成同文件名:
- 【JAVA】【Eclipse】出现This element neither has attached source nor attached Javadoc...的解决方法
This element neither has attached source nor attached Javadoc and hence no Javadoc could be found Ec ...
- [JBoss] - JBAS015874: JBoss AS 7.1.1.Final "Brontes" started - Eclipse中不能正常启动的解决方法
在使用Eclipse + Jboss插件时,如果有时写配置文件写错,在重新启动发布JBoss时,会出现: 14:43:49,317 INFO [org.jboss.as] (Controller B ...
随机推荐
- 前端模块化(CommonJs,AMD和CMD)
前端模块规范有三种:CommonJs,AMD和CMD. CommonJs用在服务器端,AMD和CMD用在浏览器环境 AMD 是 RequireJS 在推广过程中对模块定义的规范化产出. CMD 是 S ...
- std::tuple
tuple,元组类型.头文件<tuple>,tuple是一个固定大小的不同类型(异质,heterogeneous)值的集合(这一点是tuple与其他常规STL容器的最大不同,即它可以同时存 ...
- eclipse安装相关
一 安装相关 1.下载eclipse(这里我下载了个简单版本) https://www.eclipse.org/downloads/packages/
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 SPIFFS文件系统
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- codeforce -14A A. Letter
A. Letter time limit per test 1 second memory limit per test 64 megabytes input standard input outpu ...
- LogBack.xml文件配置
Logback-spring.xml配置文件 1.日志级别:日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL, ...
- 在.NET Core 3.0中发布单个EXE文件
假设我有一个简单的“ Hello World”控制台应用程序,我想发送给朋友来运行.朋友没有安装.NET Core,所以我知道我需要为他构建一个独立的应用程序.很简单,我只需在项目目录中运行以下命令: ...
- MySQL数据库的安装与配置(windows)
MySQL是目前最为流行的开放源码的数据库,是完全网络化的跨平台的关系型数据库系统,它是由瑞典MySQLAB公司开发,目前属于Oracle公司.任何人都能从Internet下载MySQL软件,而无需支 ...
- Flask框架实现给视图函数增加装饰器操作示例
在@app.route的情况下增加装饰器的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- 开根号 HYSBZ - 3211
区间修改+区间查询(线段树板子题) 另外因为1e9内的数开5次根号必定为1或0,所以我们可以提前打表i<=sqrt[1e9], s[i]=sqrt(i).这样每次改值不必再调用系统的sqrt: ...