黑马程序员技术交流社区

标题: 匿名内部类中为什么访问局部变量是final类型的 [打印本页]

作者: 李杰    时间: 2012-9-4 08:46
标题: 匿名内部类中为什么访问局部变量是final类型的
真心求教:)
作者: 邓超军    时间: 2012-9-4 09:09
应该是从生命周期长短来理解:
一个语句只能访问一个生命周期大于等于这个语句生命周期的变量。
如内部类的生命周期等于其所在的外部类的生命周期,所以要想访问一个局部变量,因为局部变量的生命周期小于内部类的生命周期,所以要用final修饰,使局部变量的生命周期大于等于内部类的生命周期,这样内部类才能访问局部变量。
作者: 吴通    时间: 2012-9-4 09:18
首先,final是一个修饰符。
1.可以修饰类、函数和变量
2.被final修饰的类不可以继承,为防止被继承。
3.被final修饰的方法不可以被复写
4.被final修饰的变量是一个常量,只赋值一次,既可以修饰成员变量又可以修饰局部变量。

内部类有两种:定义在成员位置上的和定义在局部位置上的。
定义在成员位置上的内部类可以访问成员变量和局部变量,而定义在局部位置上的内部类中的方法
可以直接访问外部类中的成员,但是想要访问局部变量,则局部变量前面必须加final才能被访问。
class Outer
{
int x=3;
void method(final int a)
{
final int y=4;
  class Inner
  {
   void function()
   {
    System.out.println(x+y+a);
   }
  }
}
}
class InnerTest
{
public static void main(String[] args)
{
  Outer out=new Outer();
  out.method(7);
}
}
作者: 杨震    时间: 2012-9-4 10:30
你可以去看下java核心技术一书,里面结合例子讲的非常详细
作者: 黑马--张帅    时间: 2012-9-4 11:20
有fianl和没fianl的区别都在这两幅图中

内存图.png (39.04 KB, 下载次数: 17)

内存图.png

内存1.png (41.44 KB, 下载次数: 40)

内存1.png





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