内部类可以是final类吗 匿名内部类访问局部变量,为什么final?
匿名内部类访问局部变量,为什么final?
这是变量作用域的问题,因为匿名内部类出现在方法内部。如果要访问方法的参数或方法中定义的变量,则必须将这些参数和变量修改为final。
尽管匿名内部类在方法内部,但内部类被编译为外部。内部这意味着内部类的位置和外部类中的方法处于同一级别。外部类中方法中的变量或参数只是方法的局部变量,这些变量或参数的作用域仅在方法内部有效。由于内部类和方法在编译时处于同一级别,因此只有在方法中的变量或参数是final时才能引用内部类。
匿名内部类访问局部变量为什么final?
确保不会在匿名内部类内部或外部修改局部变量。因为匿名内部类实际上复制了一个局部变量并在匿名内部类中使用它。如果未设置为final,则局部变量将被外部修改,这将导致与匿名内部类中的副本不一致,这在逻辑上是不合理的。所以Java虚拟机就是这样设计的,强制局部变量是final,这在语义上是一致的。
匿名内部类调用参数时为什么参数必须是final的?
public class InnerClass{
public InnerClass(字符串名称,字符串年龄){这个。内部类$name=姓名这个。内部类$age=age
}
public void display(){系统输出打印( 这个。内部类$name“---”这个。内部类$age)
}
}
因此,根据上面的代码,内部类不直接调用方法传递的参数,而是使用自己的构造函数来备份传入的参数。内部方法调用自己的属性,而不是外部方法传递的参数。
到目前为止,我们还没有解释为什么它是最终的?内部类中的属性和外部方法的参数从外观上看是一样的,但实际上不是,所以可以随意更改。也就是说,内部类中属性的改变不会影响外部参数。然而,从程序员的角度来看,这是不可行的。毕竟,从程序的角度来看,这两个基本参数可以改变是一样的。如果内部类需要更改,但外部方法的形式参数不更改,则很难理解和接受。因此,为了保持参数的一致性,规定使用final,以避免形式参数不变。
内部类可以是final类吗 java定义一个数组 匿名内部类为什么用final
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。