A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dengwenjing58 中级黑马   /  2015-11-28 22:49  /  830 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   匿名内部类中的方法是否可以调用局部变量?为什么?

6 个回复

倒序浏览
不可以
回复 使用道具 举报
可以的,匿名内部类本身就属于局部内部类,是写在方法里面的,方法里面自然就有局部变量,匿名内部类调用的局部变量要用final修饰。JDK1.8之后取消了这种机制,老师们说是BUG
回复 使用道具 举报
应该是不能的
回复 使用道具 举报
marcojam 来自手机 中级黑马 2015-11-29 19:18:46
报纸
可以,但是要加final修饰
回复 使用道具 举报
在Java8之前,Java要求被局部内部类、匿名内部类访问的局部变量必须使用final修饰,从Java8开始这个限制被取消了,Java8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用final修饰。Java8将这个功能称为:“effectively final”,它的意思是对于被匿名内部类访问的局部变量,可以用final修饰,也可以不用final修饰。
回复 使用道具 举报
完全手打例程:
interface A
{
  void test();
}
public class ATest
{
  public static void main(String[] args)
  {
    int age=8;
    A a=new A()
    {
      public void test()
      {
        //在Java8以前下面语句将提示错误:age必须使用final修饰
        //从Java8开始匿名内部类、局部内部类允许访问非final的局部变量
        System.out.println(age);
      }
    };
    a.test();
  }
}
//以上例程虽然没有机试编译,但是是纯手打哦!!!此历程来自《**Java讲义》P211
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马