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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

真心求教:)

4 个回复

正序浏览
有fianl和没fianl的区别都在这两幅图中

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

内存图.png

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

内存1.png

点评

经典中的战斗机  发表于 2012-9-6 19:11
回复 使用道具 举报
你可以去看下java核心技术一书,里面结合例子讲的非常详细
回复 使用道具 举报
首先,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);
}
}
回复 使用道具 举报
应该是从生命周期长短来理解:
一个语句只能访问一个生命周期大于等于这个语句生命周期的变量。
如内部类的生命周期等于其所在的外部类的生命周期,所以要想访问一个局部变量,因为局部变量的生命周期小于内部类的生命周期,所以要用final修饰,使局部变量的生命周期大于等于内部类的生命周期,这样内部类才能访问局部变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马