Android开发基础教程.pdfVIP

  • 15
  • 0
  • 约3.58千字
  • 约 3页
  • 2017-08-13 发布于北京
  • 举报
匿名内部类只能使用外部方法的局部常量 原因如下: 对象的生命周期与局部变量不同,局部变量的生命周期不超过方法的作用域,即方法执 行完毕后,方法栈中的所有局部变量都将被JVM 回收。而对象是在没有引用变量指向时,才 会由JVM 回收。若方法执行完毕后,匿名内部类仍由方法之外的引用变量指向,则该对象仍 会存在,但该对象又使用了方法中的某个局部变量,该局部变量是应该回收?还是不回收? 为解决这个矛盾。Java 会在匿名内部类中隐含地创建一个同类型的变量,将局部变量的值 赋值给该变量,则匿名内部类使用的变量是这个隐含的变量,该变量与匿名内部类的生命周 期相同。这就解决了以上的矛盾。即匿名内部类之外的方法执行完毕后,JVM 会正常的将方 法中的所有变量回收。而不影响匿名内部类。 因此,代码上我们看到的匿名内部类使用的是外部方法的局部变量,实际上使用的是那 个隐含的变量。 但这又会出现一个新的问题,若我们在匿名内部类中修改该变量的值,实际上是不会影 响外部方法中的局部变量,但代码上看上去,就会出现一个“变量”有两个值的情况。为此, Java 硬性规定:这种变量的值不允许修改,所以就必须声明为常量。 【示例-6】 匿名内部类中若使用外部方法的局部变量,则该局部变量必须改为常量类型 package com.ityw.se

文档评论(0)

1亿VIP精品文档

相关文档