首先,内部类被编译的时候会生成一个单独的内部类的.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来让该引用不可改变)
相关推荐
此外,`final`关键字还有其他用途,如`final`修饰的匿名内部类和`final`局部变量在匿名内部类中的特殊规则,以及`final`与`static`结合时的静态常量等。理解并熟练应用`final`关键字对于编写高效、安全的Java代码至...
final关键字是Java语言中的一个基本概念,它用于限制类、变量、方法以及引用的修改和扩展。final关键字的主要作用是告诉编译器该元素是最终的,不可变的。对于初学者来说,掌握final关键字的使用可以帮助编写出更加...
Java中的`final`和`static`关键字是编程中非常重要的两个修饰符,它们分别用于不同的场景,以确保代码的稳定性和高效性。 首先,`final`关键字主要用于表示不可变性。它可以用来修饰类、方法和变量。对于类,如果一...
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法。 主要介绍:一.final关键字的基本...
在Java编程中,final关键字扮演着至关重要的角色,它用于声明不可变的变量、方法以及类,以确保代码的稳定性和安全性。以下是关于final关键字的深入解析: 1. **final类**: 当一个类被声明为final时,这意味着这...
这个关键字可以应用于变量、方法和类,分别赋予它们不同的特性。以下是对`final`关键字在不同场景下使用的详细介绍: 1. **final变量** - `final`修饰的局部变量一旦初始化后,就不能再改变其值。这有助于防止意外...
final关键字有助于确保数据的不可变性,增强代码的安全性和效率,尤其在并发编程和创建线程安全的类时显得尤为重要。 关于package和import,package是Java中的命名空间,用于组织和管理类,避免命名冲突。每个Java...
### Java中的final关键字详解 #### 一、final的概述与用途 `final`关键字在Java中扮演着重要的角色,它通常被用来表示“不可变”的特性。`final`可以用来修饰类、方法以及变量,其核心目的是为了保护数据的安全性...
Java 中的 final 关键字、权限修饰符和内部类 final 关键字是 Java 中的一个重要概念,它用于修饰类、方法和变量,以确保它们不可被改变。下面我们将详细介绍 final 关键字的概念、使用方式和特点。 final 关键字...
### final关键字在Java中的...通过对变量、方法和类的限制,开发人员可以创建出更加健壮和易于维护的软件系统。然而,在实际开发过程中也需要根据具体需求来合理使用`final`关键字,避免不必要的限制导致代码过于僵化。
此外,`final`关键字还与匿名内部类和局部变量紧密相关。在创建匿名内部类时,如果需要引用外部类的非静态变量,这个变量必须是`final`的。这是因为内部类可能在外部类的实例生命周期之外存在,因此需要保证变量的值...
最后,`final`关键字在匿名内部类和lambda表达式中也有重要作用。当一个匿名内部类引用了一个外部作用域的变量时,如果希望这个变量在内部类中保持不变,就需要将其声明为`final`。同样,在lambda表达式中,被捕获的...
`final`关键字在Java中扮演了多个角色,包括创建不可变变量、防止方法重写以及禁止类的继承。理解并正确使用`final`关键字对于编写安全、可维护的代码至关重要。通过深入学习和实践,开发者可以更好地利用这一特性来...
Java编程中的`static`关键字和`final`关键字是两个非常重要的概念,它们分别代表不同的特性。首先,我们来看`static`关键字。 `static`关键字用于声明静态变量和静态方法。静态变量,也称为类变量,属于类本身而...
在Java编程中,权限控制是一个重要的话题,它涉及到变量、方法和类的访问权限,以确保代码的封装性和安全性。Java使用不同的权限修饰符来控制成员的可访问性。另一个重要的概念是final关键字,它用于声明类、方法和...
在这个例子中,final关键字用于限制b的值在方法内部不可改变,但这并不影响字符串连接的结果。最后,println语句检查了a和c以及a和e是否指向相同的字符串对象,结果显示它们不相等,因为每次字符串连接都会创建新的...
在方法参数列表中使用`final`关键字,防止方法内部改变参数引用: ```java public void process(final Object obj) { obj = new Object(); // 不合法 obj.someMutableProperty = "New Value"; // 合法,仅修改对象...
局部内部类和匿名内部类是Java中的一种特性,它们允许我们...通过使用final关键字,我们可以确保内部类所使用的变量在创建后不会被意外地修改,从而避免了潜在的逻辑错误。这种设计使得Java的内部类机制既灵活又安全。
### final关键字 在Java编程语言中,`final`是一个关键字,用于声明类、方法或变量,表明它们一旦被赋值后,就不允许被修改或重写。 - **final修饰类**:被`final`修饰的类不能被继承。这是一种防止类功能被扩展或...