Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199367
  • 博文数量: 66
  • 博客积分: 966
  • 博客等级: 准尉
  • 技术积分: 550
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-11 11:52
文章分类

全部博文(66)

文章存档

2012年(60)

2011年(6)

分类: Java

2011-12-08 10:04:02

1.finalfinal 对于常量来说,意味着值不能改变,例如 final int i=100。这个i的值永远都是100。但是对于变量来说又不一样,只是标识这个引用不可被改变,例如 final File f=new File("c:\\test.txt");那么这个f一定是不能被改变的,如果f本身有方法修改其中的成员变量,例如是否可读,是允许修改的。形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已。
 
实例解释********

3)final变量在内部类中的使用

程序需要在匿名内部类中使用局部变量,则局部变量必须声明为final类型。否则会编译错误。为什么必须声明为final类型呢?这是应为

对于普通变量而言,它的作用域是停留在该方法内,当方法执行结束,该局部变量也就随之消失,但内部类则可能产生隐式的“闭包”,

闭包使得局部变量脱离它所在的方法继续存在。

看下面的例子:

public class ClosureTest {

public static void main(String[] args) {

final String str = "java" ;//定义局部变量

 

new Thread(new Runnable(){

public void run(){

for(int i=0 ;i<100 ; i ){

System.out.println(str i);

try {

Thread.sleep(100) ;

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}).start() ;

}

}

程序首先定义了一个局部变量str,当程序main方法执行完成后,str的生命周期就结束了,但是子线程还没有执行结束,而且子线程要

使用main中的局部变量str,这个时候就扩大了str的作用范围。这个时候如果str没有被修饰为final类型,而可以随便改变,则会引起

极大的混乱,因此java编译器要求所有的内部类访问的局部变量必须使用final修饰符修饰

阅读(1432) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

yangrenjun2011-12-28 09:44:24

泥亚鳅: 轻易的改变,极大的混乱!.....
没有明白你说什么

泥亚鳅2011-12-09 00:59:04

轻易的改变,极大的混乱!