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

全部博文(66)

文章存档

2012年(60)

2011年(6)

分类: Java

2011-11-17 10:28:03

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修饰符修饰

阅读(1266) | 评论(0) | 转发(0) |
0

上一篇:多线程(2)

下一篇:Java 常用关键字解释

给主人留下些什么吧!~~