有final引出的一个问题

来源:互联网 发布:李小璐开的淘宝店名字 编辑:程序博客网 时间:2024/05/21 09:52

Java要求所有被内部类访问的局部变量都是使用final类型的。

对应普通的局部变量而言,他的作用域就停留在方法内,当方法结束时,改局部变量也随之消失。

但内部类则可能产生隐式的 “闭包”,闭包将使得局部变量脱离它所在的方法继续存在。


实例:

第7行代码执行结束后 线程中仍然可以访问 final变量 info

public class MyFinal{public static void main(String [] args){MyFinal mf = new MyFinal();mf.test();System.out.println("test method operation end");mf.other();}public void other(){System.out.println("action other....");}public void test(){final String info = "Java";Thread t =new Thread(new Runnable(){@Overridepublic void run(){for(int i = 0 ;i<1000;i++){System.out.println(info+" i ="+i);try{Thread.sleep(2000);}catch(InterruptedException e){e.printStackTrace();}}}});System.out.println("ready start thread");//start threadt.start();System.out.println("start thread finish");}}


0 0
原创粉丝点击