`
gatusso52
  • 浏览: 112288 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

理解为什么局部类的参数 以及外围成员 必须为final

    博客分类:
  • java
JVM 
阅读更多

在方法结束之后,栈上的东西生命周期结束,但堆上有可能仍然维持引用

局部类就经常如此 例如ActionListener


这样就会出现,外围类挂了,局部类还没挂的情况

此时如果局部类想引用 自然会null


2

解决方法:

其实JVM会在局部类里加一个“隐藏的局部类的成员”,并将外围类的成员 赋值给这个 局部类的成员


3

所以可以看出,

从语义上来讲 这个“赋值”是不能改变的


故final

分享到:
评论

相关推荐

    局部内部类和匿名内部类使用局部变量为什么要final1

    这种情况下的阅读和运行结果不一致,为了避免这种混淆,Java规定局部变量必须是final的,确保一旦赋值就不能更改,从而保证内部类的成员变量(实际上是局部变量的副本)与原始变量保持一致。 4. **final关键字的...

    final修饰成员变量和局部变量.md

    本文章是关于final部分知识所作的自我总结,内容为final对成员变量和局部变量修饰的简要解答,除了对自我java学习的一个小结,也希望能够帮助到在java路上对该内容疑惑的同行

    Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释.doc

    - 可以访问包含它的方法的所有局部变量、参数以及成员变量。 - 如果要访问方法中的局部变量,则该局部变量必须被声明为final。 2. **final修饰符** - 在Java中,final关键字可以用于修饰变量、方法和类。 - 当...

    局部变量用final的讨论

    2. **匿名内部类与final**:在Java中,如果一个局部变量要在匿名内部类中使用,那么它必须是`final`或effectively final(实际上相当于只赋值一次)。这是因为内部类可以访问外部类的final或effectively final变量,...

    final类的适应实例

    Java中final类的简单使用,并对Java关键字的使用做出了总结

    final修饰类

    当函数的参数声明为`final`时,表明该参数是只读的,不允许在方法内部改变其值,这在多线程环境下可以避免意外的修改。 总结来说,`final`关键字提供了代码的稳定性和安全性,它可以帮助开发者定义不可变的对象,...

    深入理解Java中的final关键字_动力节点Java学院整理

    这适用于成员变量、局部变量以及静态常量。例如: ```java public static final String LOAN = "loan"; ``` 在这个例子中,`LOAN` 是一个不可变的常量,尝试重新赋值会导致编译错误。`final` 变量在多线程环境中...

    day11【final、权限、内部类】.pdf

    通过文件内容的描述,我们可以看出`final`关键字的使用、权限修饰符的定义和作用、内部类的概念及其优势、以及引用类型在Java编程中的重要性和应用场景。这些知识点对于理解Java编程的基本概念和提高编程技能至关...

    Java基础权限控制与final,内部类

    protected表示成员可以被同一个包内的类以及所有子类访问;default即没有修饰符时,表示成员仅能被同一个包内的其他类访问;private表示成员只能在其所在类内部访问。这些权限修饰符的选择取决于你希望其他代码对...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是掌握Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 成员变量是...

    Java final关键字

    此外,`final`关键字还有其他用途,如`final`修饰的匿名内部类和`final`局部变量在匿名内部类中的特殊规则,以及`final`与`static`结合时的静态常量等。理解并熟练应用`final`关键字对于编写高效、安全的Java代码至...

    Java为什么匿名内部类参数引用需要用final进行修饰?

    Java匿名内部类参数引用需要用final进行修饰的原因分析 Java中的匿名内部类参数引用需要用final进行修饰,这是因为内部类中使用的外部变量需要延长其生命周期,以便在回调时能够找到该变量。下面是详细的分析: ...

    final类,方法,变量

    对于类级别的`final`变量(静态常量),必须在声明时或者在类的静态初始化块中赋值。而对于实例级别的`final`变量,可以在构造器中赋值。如果一个`final`变量引用一个对象,那么对象的引用不能改变,但对象的内容是...

    JavaSE之final关键字与成员变量的类型

    【JavaSE之final关键字与成员变量的类型】 在Java编程语言中,`final`关键字扮演着重要的角色,它表示“最终”或“不可改变”的特性。对于初学者来说,理解`final`的关键字用法是掌握JavaSE基础的重要一步。本篇...

    Java关键字final、static使用总结

    final 变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。 4、final 参数 final 参数可以读取使用该参数,但是无法改变该参数的值。 二、static 关键字 static 关键字可以用来修饰成员变量和...

    Java中的final关键字

    - 在创建匿名内部类时,如果需要访问外部类的局部变量,该变量必须是`final`或实际上等效于`final`的。这是因为匿名内部类可能在外部方法执行完成后仍然存在,所以需要确保引用的变量不会在内部类的生命周期内改变...

    java中final和static的区别

    1. static 修饰成员变量和成员方法,以及代码块和内部类。分别叫做静态变量、静态方法、静态代码块、静态内部类。 2. 用 static 修饰的成员变量和成员方法,独立于该类的任何对象,实际上是属于类的。也就是说不...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    这使得局部内部类可以访问它所在范围内的所有变量,包括局部变量,但这些变量必须是final的。局部内部类主要用来实现某个特定功能,其生命周期与包含它的方法或块相同。 4. **明明内部类**: "明明内部类"可能是指...

    JAVA内部类总结

    1. **访问权限**:局部内部类可以访问方法内的局部变量,但这些变量必须声明为final。 2. **实例化**:局部内部类只能在其定义的方法或构造函数内部实例化。 3. **示例**: ```java public void method() { final...

Global site tag (gtag.js) - Google Analytics