博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
方法中的内部类能不能访问方法中的局部变量,为什么?
阅读量:6478 次
发布时间:2019-06-23

本文共 1197 字,大约阅读时间需要 3 分钟。

/* * 4、 方法中的内部类能不能访问方法中的局部变量,为什么? *  * 可以,但必须用final修饰才能访问。 *  * 原因: *     一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在, *             直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量。 *  * 二,解决这一问题的办法就是使用final修饰局部变量,通过将final局部变量"复制"一份, *             复制品直接作为方法内部类中的数据成员,这事方法内部类访问的其实是这个局部变量的复制品! *             而且,由于被final修饰的变量赋值后不能再修改,所以就保证了复制品与原始变量的一致。 * *三,原因二的功能能实现的原因是:Java采用了一种copy   local   variable(复制局部变量)的方式来实现, *            也就是说把定义为final的局部变量拷贝过来用,而引用的也可以拿过来用,只是不能重新赋值。 *            从而造成了可以access   local   variable(访问局部变量)的假象,而这个时候由于不能重新赋值, *            所以一般不会造成不可预料的事情发生。 * *四, 使用final修饰符不仅会保持对象的引用不会改变, *            而且编译器还会持续维护这个对象在回调方法中的生命周期. *            所以这才是final变量和final参数的根本意义. *   *  而且jdk1.8 添加了 Effectively final 功能, *  局部内部类和匿名内部类访问的局部变量可以不加final修饰符,由系统默认添加。 *  */class Test4 {    public static void main(String[] args) {        new Dome9().method(8);    }}class Dome9{    private int x=3;    void method(int a){        int y=6;        class Dome8{            void method2(){                System.out.print(x);                System.out.print(a);                System.out.print(y);            }        }        new Dome8().method2();    }}

 

转载于:https://www.cnblogs.com/s158/p/5092791.html

你可能感兴趣的文章
利用Windows自带的Certutil查看文件MD5
查看>>
开篇,博客的申请理由
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
centos 7 部署LDAP服务
查看>>
iOS项目分层
查看>>
IntelliJ IDEA 注册码
查看>>
String字符串的截取
查看>>
Shell编程-环境变量配置文件
查看>>
Struts2和Spring MVC的区别
查看>>
理解Javascript参数中的arguments对象
查看>>
git代码冲突
查看>>
git bash 风格调整
查看>>
linux操作系统加固软件,系统安全:教你Linux操作系统的安全加固
查看>>
linux中yum源安装dhcp,24.Linux系统下动态网络源部署方法(dhcpd)
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
JavaNIO基础02-缓存区基础
查看>>
日本开设无人机专业,打造无人机“人才市场”
查看>>
190行代码实现mvvm模式
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
jeesite 框架搭建与配置
查看>>