Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57528
  • 博文数量: 20
  • 博客积分: 101
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-09 00:54
文章分类
文章存档

2012年(3)

2011年(17)

分类:

2011-12-09 00:56:23

原文地址:Java 常用关键字解释 作者:yangrenjun

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

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