原文:细说匿名内部类引用方法局部变量时为什么需要声明为final

一 前言 在研究公司某个项目的源码,看到前人使用了挺多内部类,内部类平时我用的比较多的是匿名内部类,平时用的多的是匿名内部类,其他形式的用的比较少,然后我就有个疑惑:到底内部类是基于什么样的考虑,才让java设计者搞这么一套实现 还有,平时在什么情境下会考虑使用内部类呢 这个我将在另外一篇博文进行介绍,详情参见:xxxxxx,本篇博文是在查阅内部类相关资料时,看到很多博文在解释为什么匿名内部类在引 ...

2017-11-23 22:32 1 3312 推荐指数:

查看详情

为什么Java匿名内部类访问的方法参数或方法局部变量需要final修饰

分析 1、内部类(不论是否是匿名内部类)可访问外部类变量(包括外部类的类变量、实例变量、外部类方法局部变量等)、方法:可修改变量值、调用方法等。内部类定义的位置有两种: 在外部类方法内:此时该内部类只能是匿名内部类(语法上不支持在方法内定义非匿名类)。此时内部类可访问上述所有变量 ...

Wed Jun 21 19:57:00 CST 2017 0 3698
为什么匿名内部类只能访问其所在方法中的final类型的局部变量

  大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类。   对于上面的成员内部类,一般做法是在Outer中写一个返回Inner类对象的方法 ...

Fri Mar 04 05:12:00 CST 2016 3 10034
局部内部类访问它所在方法局部变量,要求该局部变量必须声明为final的原因

  这是java的一条规则。那么为什么会有这条规则呢?要想弄懂这个问题,就需要弄懂局部内部类对象和局部变量的生命周期谁更长的问题。 首先,看一段代码,以没有将变量声明为final的代码作为例子,代码如下:   如上面的第7行代码所示,变量x没有被声明为final,如果是这样的话 ...

Sat May 12 06:12:00 CST 2018 1 2522
匿名内部类为什么访问外部类局部变量必须是final的?

1. 内部类里面使用外部类局部变量,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量,外部方法局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性。说白了,内部类会自动 ...

Fri Aug 05 08:03:00 CST 2016 1 13823
匿名内部类可以访问的变量---静态成员变量final修饰的局部变量

  在学习多线程的时候用到了匿名内部类匿名内部类可以访问static静态成员变量或者final修饰的局部变量。   匿名内部类在编译之后会生成class文件,比如Test内的第一个匿名内部类编译之后就是Test$1.class;   匿名内部类中访问的final修饰的局部变量在生成Test ...

Tue Dec 11 06:53:00 CST 2018 0 816
为什么java内部类访问局部变量必须声明为final

https://blog.csdn.net/z55887/article/details/49229491 先抛出让我疑惑了很久的一个问题 编程,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为final package test; public class ...

Thu Jul 04 06:14:00 CST 2019 0 783
匿名内部类中使用的外部局部变量为什么只能是final变量

匿名内部类引用变量会被拷贝一份到内部类的环境中 但其后,在外部,该变量如果被修改,则内部外部不一致 Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final局部变量的限制。 究其原因,在于 区域变量 x 并不是真正被拿来于内部匿名类别中使用,而是在内部 ...

Wed Aug 29 00:01:00 CST 2018 0 1082
JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?

本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量。 因此,内部类能够访问某局部变量,说明这个内部类不是在类中定义的内部类,而是在方法中定义的内部类,称之为:局部内部类 ...

Sun Aug 07 01:21:00 CST 2016 5 11312
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM