Java中的内部类02-访问其所在方法中的final类型的局部变量
来源:互联网 发布:vb皮肤控件 skinsharp 编辑:程序博客网 时间:2024/05/21 11:09
内部类对象的生命周期会超过局部变量的生命周期。
局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类一样:自创建一个局部内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才会死亡(被JVM垃圾回收)。所以完全可能出现的一种情况是:成员方法已调用结束,局部变量已死亡,但局部内部类的对象仍然活着。
局部内部类对象可以访问同一个方法中被定义为final类型的局部变量。定义为final后,编译程序的实现方法:对于局部内部类对象要访问的所有final类型局部变量,都拷贝成为该对象中的一个数据成员。这样,即使栈中局部变量已死亡,但被定义为final类型的局部变量的值永远不变,因而局部内部类对象在局部变量死亡后,照样可以访问final类型的局部变量,因为它自己拷贝了一份,且与原局部变量的值始终一致。(同样适用于匿名内部类)
下面代码演示了,外部类中的成员方法结束之后,局部内部类对象还被其他对象引用。
class Outer {public static void main1(String[] args) {Outer out = new Outer();Object obj = out.method();}Object method() {final int locvar = 1;class Inner {void displayLocvar() {System.out.println("locvar = " + locvar);}}Object in = new Inner();return in;}}
要不要加final就是看局部内部类的外围方法结束后,其参数是不是还要被局部内部类使用,如果还要被使用,则要加final否则就不用加了。
阅读全文
0 0
- Java中的内部类02-访问其所在方法中的final类型的局部变量
- Java--局部内部类在访问他所在方法中的局部变量必须用final修饰
- 【转自JavaEye】为什么“局部内部类能且只能访问所在方法中的final类型的参数和变量”?
- 方法中的匿名内部类只能访问final类型的局部变量
- 为什么匿名内部类只能访问其所在方法中的final变量
- 为什么匿名内部类只能访问其所在方法中的final变量
- 为什么匿名内部类只能访问其所在方法中的final变量
- 为什么匿名内部类只能访问其所在方法中的final变量
- 方法中的内部类只能访问final类型的变量
- JAVA匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
- 为什么在方法中定义的内部类只能访问方法中的final类型的局部变量?
- 为什么在方法中定义的内部类只能访问方法中的final类型的局部变量?
- 在java中, 方法的内部类可以访问方法中的局部变量,但必须用final修饰才能访问。
- Java中为什么局部内部类只能访问方法中的final型成员变量
- 为什么方法中的内部类只能访问final修饰的局部变量
- 局部内部类为什么访问方法中的局部变量时局部变量要加final
- 局部内部类访问方法中的局部变量为什么加final
- 方法中的内部类访问方法中的局部变量为什么要加final
- 电脑(火狐)访问手机端页面(也就是偷源码)
- python---模块
- java通过HttpServletRequest获取post请求中的body内容
- 整数排序2
- 计算机名(主机名)、用户账号、系统型号、操作系统
- Java中的内部类02-访问其所在方法中的final类型的局部变量
- Linux入门须知快捷键,Linux常用快捷键,ubuntu常用快捷键,terminate清屏方式,清屏快捷键,进出虚拟机快捷方式
- [Linux]死锁
- 使用Android Studio开发时遇到的问题及解答(持续更新中~~)
- 内部类
- 拉格朗日乘数法
- arcgis——arcCatalog 10.2 创建企业级数据库
- freemarker的使用心得
- iText7报错com.itextpdf.kernel.font.PdfType0Font.getCidFontType2(PdfType0Font.java:720)解决