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

本文共 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

你可能感兴趣的文章
16进制数至字符串转换
查看>>
如何使用Python3.4连接MySQL
查看>>
客户端禁用cookie情况下的URL重写
查看>>
Codeforces Round #325 (Div. 2) A. Alena's Schedule 水题
查看>>
排序算法之快速排序(java实现)
查看>>
(转)树的深度优先与广度优先遍历
查看>>
LoadRunner支持的IE版本
查看>>
VS XML注释
查看>>
Java CSV操作(导出和导入)
查看>>
Language Tool ,a plugin for TeXStudio
查看>>
基于OWIN ASP.NET WebAPI 使用OAUTH2授权服务的几点优化
查看>>
模板 可持久化字典树
查看>>
Composer命令详解
查看>>
Android开发学习:[15]自动导入包
查看>>
一个有趣的swap函数
查看>>
Burp Suite抓包、截包和改包
查看>>
ViewHolder模式超简洁写法
查看>>
【推荐】2016年不得不读的九本好书
查看>>
Android -> 怎样避免Handler引起内存泄露
查看>>
组件接口(API)设计指南[4]-通知(Notifications)
查看>>