`

内部类和final关键字

    博客分类:
  • java
 
阅读更多
首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。  
当外部类传的参数被内部类调用时,从java程序的角度来看是直接的调用例如:  
public void dosome(final String a,final int b){  
  class Dosome{public void dosome(){System.out.println(a+b)}};  
  Dosome some=new Dosome();  
  some.dosome();  
}  
从代码来看好像是那个内部类直接调用的a参数和b参数,但是实际上不是,在java编译器编译以后实际的操作代码是  
class Outer$Dosome{  
  public Dosome(final String a,final int b){  
  this.Dosome$a=a;  
  this.Dosome$b=b;  
}  
  public void dosome(){  
  System.out.println(this.Dosome$a+this.Dosome$b);  
}  
}}  
从以上代码看来,内部类并不是直接调用方法传进来的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。  
这样理解就很容易得出为什么要用final了,因为两者从外表看起来是同一个东西,实际上却不是这样,如果内部类改掉了这些参数的值也不可能影 响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部 调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是 final来规避这种莫名其妙错误的存在。”
 (简单理解就是,拷贝引用,为了避免引用值发生改变,例如被外部类的方法修改等,而导致内部类得到的值不一致,于是用final来让该引用不可改变)
分享到:
评论

相关推荐

    Java final关键字

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

    final关键字详细解读

    final关键字是Java语言中的一个基本概念,它用于限制类、变量、方法以及引用的修改和扩展。final关键字的主要作用是告诉编译器该元素是最终的,不可变的。对于初学者来说,掌握final关键字的使用可以帮助编写出更加...

    java中final关键字和static关键字详细用法

    Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...

    Java中final关键字详解

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。 主要介绍:一.final关键字的基本...

    深入解析Java编程中final关键字的作用

    在Java编程中,final关键字扮演着至关重要的角色,它用于声明不可变的变量、方法以及类,以确保代码的稳定性和安全性。以下是关于final关键字的深入解析: 1. **final类**: 当一个类被声明为final时,这意味着这...

    Java中的final关键字

    这个关键字可以应用于变量、方法和类,分别赋予它们不同的特性。以下是对`final`关键字在不同场景下使用的详细介绍: 1. **final变量** - `final`修饰的局部变量一旦初始化后,就不能再改变其值。这有助于防止意外...

    JavaSE基础:多态、final关键字-27

    final关键字有助于确保数据的不可变性,增强代码的安全性和效率,尤其在并发编程和创建线程安全的类时显得尤为重要。 关于package和import,package是Java中的命名空间,用于组织和管理类,避免命名冲突。每个Java...

    final关键字和static_用法

    ### Java中的final关键字详解 #### 一、final的概述与用途 `final`关键字在Java中扮演着重要的角色,它通常被用来表示“不可变”的特性。`final`可以用来修饰类、方法以及变量,其核心目的是为了保护数据的安全性...

    day11【final、权限、内部类】1

    Java 中的 final 关键字、权限修饰符和内部类 final 关键字是 Java 中的一个重要概念,它用于修饰类、方法和变量,以确保它们不可被改变。下面我们将详细介绍 final 关键字的概念、使用方式和特点。 final 关键字...

    final关键字

    ### final关键字在Java中的...通过对变量、方法和类的限制,开发人员可以创建出更加健壮和易于维护的软件系统。然而,在实际开发过程中也需要根据具体需求来合理使用`final`关键字,避免不必要的限制导致代码过于僵化。

    浅析Java中的final关键字Java开发Java经验技

    此外,`final`关键字还与匿名内部类和局部变量紧密相关。在创建匿名内部类时,如果需要引用外部类的非静态变量,这个变量必须是`final`的。这是因为内部类可能在外部类的实例生命周期之外存在,因此需要保证变量的值...

    第05章 面向对象(下) 05 Final关键字

    最后,`final`关键字在匿名内部类和lambda表达式中也有重要作用。当一个匿名内部类引用了一个外部作用域的变量时,如果希望这个变量在内部类中保持不变,就需要将其声明为`final`。同样,在lambda表达式中,被捕获的...

    【Java编程教程】详解Java final 关键字.pdf

    `final`关键字在Java中扮演了多个角色,包括创建不可变变量、防止方法重写以及禁止类的继承。理解并正确使用`final`关键字对于编写安全、可维护的代码至关重要。通过深入学习和实践,开发者可以更好地利用这一特性来...

    详解Java编程中static关键字和final关键字的使用

    Java编程中的`static`关键字和`final`关键字是两个非常重要的概念,它们分别代表不同的特性。首先,我们来看`static`关键字。 `static`关键字用于声明静态变量和静态方法。静态变量,也称为类变量,属于类本身而...

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

    在Java编程中,权限控制是一个重要的话题,它涉及到变量、方法和类的访问权限,以确保代码的封装性和安全性。Java使用不同的权限修饰符来控制成员的可访问性。另一个重要的概念是final关键字,它用于声明类、方法和...

    Java中final关键字的用法总结

    在这个例子中,final关键字用于限制b的值在方法内部不可改变,但这并不影响字符串连接的结果。最后,println语句检查了a和c以及a和e是否指向相同的字符串对象,结果显示它们不相等,因为每次字符串连接都会创建新的...

    浅谈Java中的final关键字与C#中的const, readonly关键字

    在方法参数列表中使用`final`关键字,防止方法内部改变参数引用: ```java public void process(final Object obj) { obj = new Object(); // 不合法 obj.someMutableProperty = "New Value"; // 合法,仅修改对象...

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

    局部内部类和匿名内部类是Java中的一种特性,它们允许我们...通过使用final关键字,我们可以确保内部类所使用的变量在创建后不会被意外地修改,从而避免了潜在的逻辑错误。这种设计使得Java的内部类机制既灵活又安全。

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

    ### final关键字 在Java编程语言中,`final`是一个关键字,用于声明类、方法或变量,表明它们一旦被赋值后,就不允许被修改或重写。 - **final修饰类**:被`final`修饰的类不能被继承。这是一种防止类功能被扩展或...

Global site tag (gtag.js) - Google Analytics