内部类引用局部变量为什么要求必须是final的,而引用全局变量就不需要 内部类引用局部变量为什么要求必须是final的,而引用全局变量就不需要 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 会吗?我编写的内部类引用局部变量很正常阿只不过在线程里引用局部变量就需要final了 Java中只听说过类变量,没听说过全局变量…… 如果定义一个匿名内部类,并且希望它使用一个在其外部定义的对象,则其参数引用是final的 在内部类中访问局部变量,编译器实际上会为该内部类创建一个成员变量,以及带有参数的构造方法,然后将该变量传入构造方法,也就是说外面的变量和类里面的变量就是名字相同而已,此时你无论修改哪一个都对另外一个不产生影响,这样就出现矛盾了,防止这种现象就规定只准用final你可以自己定义构造方法然后传进去,就没必要定义final变量成员变量的话实际上内部类访问就是用类似于Test.this.xxx的形式访问跟类信息或者对象信息有关的,修改哪一个都会造成变量值的修改,就不存在上面的那种矛盾了 http://www.blogjava.net/hongzionline/archive/2007/09/19/146392.htmlLZ可以看下这个对final关键字的理解 局部内部类 访问局部变量 该变量必须被声明为final 这是为了保证局部变量跟与在局部类内建立的拷贝保持一致 该说的都被你说了,我再补充一点:就是内部类在使用局部变量的时候为什么要创建一个改局部变量的拷贝呢?原因就是:局部变量在方法结束后生命周期就结束了,但是内部类的对象却不是,所以内部类中使用局部变量的话,就需要改变量的一份拷贝。但是既然是拷贝,就会出现两边值(局部变量和局部变量的拷贝)不一致的情况,所以要确保同步最直接的方法就是不对该变量做修改,最终的结果就是你的疑问了,“内部类引用局部变量为什么要求必须是final的”。当然了“全局变量”(你的意思应该是 实例变量 )的生命周期比局部变量相对要长,不会出现该问题,也就不需要拷贝,当然也就不需要强制为final来确保值同步了 如何获取网页源代码中标签信息的内容 数据库语句单引号的问题 ---------------------》请教鼠标滚轮事件的模拟方法《------------------- 帮忙推荐几本自学用书! 呜!呜!呜...大哥来帮我! 初学JAVA,遇到的一个问题。求助 为什么按住mouse的左键就不能触发mouseMoved事件? java的JList对象如何往里一条一条地加数据??? help me! java 打印\b不回退而打印一个口呢,为什么呢?大神们 讨论,把JAVA编译成不依赖于JVM的EXE文件的可行性 连接数据库失败,求高手指点。
只不过在线程里引用局部变量就需要final了
你可以自己定义构造方法然后传进去,就没必要定义final变量
成员变量的话实际上内部类访问就是用类似于Test.this.xxx的形式访问跟类信息或者对象信息有关的,修改哪一个都会造成变量值的修改,就不存在上面的那种矛盾了
LZ可以看下这个对final关键字的理解
原因就是:局部变量在方法结束后生命周期就结束了,但是内部类的对象却不是,所以内部类中使用局部变量的话,就需要改变量的一份拷贝。但是既然是拷贝,就会出现两边值(局部变量和局部变量的拷贝)不一致的情况,所以要确保同步最直接的方法就是不对该变量做修改,最终的结果就是你的疑问了,“内部类引用局部变量为什么要求必须是final的”。
当然了“全局变量”(你的意思应该是 实例变量 )的生命周期比局部变量相对要长,不会出现该问题,也就不需要拷贝,当然也就不需要强制为final来确保值同步了