黑马程序员技术交流社区

标题: 局部内部类注意的问题 [打印本页]

作者: hezhipengzipp    时间: 2016-2-25 08:24
标题: 局部内部类注意的问题
在jdk1.8之前       局部内部类访问局部变量时,局部变量需要加final修饰!

        Why?局部变量时随着方法的调用而调用,随着方法的调用完毕而消失,而我们知道new出来的对象是保存在堆内存中,并不会立即消失,所以我们需要对所访问的局部变量进行final修饰,加入final修饰后,这个变量就成了常量。
        但在用jdk1.8使用时,局部内部类访问局部变量,并不需要对局部变量加final修饰。
使用jdk1.8代码
package Pratice;
//这是jdk1.8版本的,从这个代码可以看出,局部内部类访问局部变量不需要加final修饰
//其实是底层默认加了final进行修饰
package Pratice;
public class Inner {
        public void method(){
                int a=10;
                class InnerText{
                        public void method2(){
                                System.out.println(a);
                        }
                }
        }
}
用反编译工具xlad可以看到jdk进行的优化
package Pratice;

import java.io.PrintStream;

public class Inner
{

        public Inner()
        {
        }

        public void method()
        {
                int a = 10;
        }

        // Unreferenced inner class Pratice/Inner$1InnerText
        class 1InnerText
        {

                final Inner this$0;
                private final int val$a;

                public void method2()
                {
                        System.out.println(a);
                }

                        1InnerText()
                        {
                                this$0 = Inner.this;
                                a = i;
                                super();
                        }
        }

}



作者: hezhipengzipp    时间: 2016-2-25 08:42
各位请留下你们的足迹,跪求黑马币
作者: z2585261    时间: 2016-2-25 09:02
顶顶顶顶顶
作者: cxy8161994    时间: 2016-2-25 14:27
顶顶顶顶顶,66666




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2