黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: dengwenjing58    时间: 2015-11-28 22:49
标题: 内部类
   匿名内部类中的方法是否可以调用局部变量?为什么?

作者: 袁有福123    时间: 2015-11-28 23:27
不可以
作者: championjx    时间: 2015-11-28 23:43
可以的,匿名内部类本身就属于局部内部类,是写在方法里面的,方法里面自然就有局部变量,匿名内部类调用的局部变量要用final修饰。JDK1.8之后取消了这种机制,老师们说是BUG
作者: Camwly    时间: 2015-11-29 13:00
应该是不能的
作者: marcojam    时间: 2015-11-29 19:18
可以,但是要加final修饰
作者: 一路向东    时间: 2015-11-29 19:42
在Java8之前,Java要求被局部内部类、匿名内部类访问的局部变量必须使用final修饰,从Java8开始这个限制被取消了,Java8更加智能:如果局部变量被匿名内部类访问,那么该局部变量相当于自动使用final修饰。Java8将这个功能称为:“effectively final”,它的意思是对于被匿名内部类访问的局部变量,可以用final修饰,也可以不用final修饰。
作者: 一路向东    时间: 2015-11-29 19:48
完全手打例程:
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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2