java基础:final关键字的深入使用(二)

2014-11-24 03:07:57 · 作者: · 浏览: 4
呢?这是应为

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

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

看下面的例子:

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

摘自 xxqi1229的专栏