当前位置: 首页 > 图灵资讯 > 技术篇> java final详解

java final详解

来源:图灵教育
时间:2023-06-01 09:45:12

修饰:表示类别不能继承

修饰方法:表示方法不能被子类覆盖,但可以重载

修改变量:表示变量一旦赋值,就不能改变其值。

a、变量修改成员

如果final修改类变量,则只能在静态初始化块中指定初始值或声明该类变量时指定初始值。

如果final修改了成员变量,则可以在非静态初始化块中执行初始值,声明变量或构造器。

b、修改局部变量

系统不会初始化局部变量,局部变量必须由程序员显示。因此,当使用final修改局部变量时,

也就是说,默认值可以在定义时指定(后面的代码不能再赋值变量),也不能指定默认值,但在后面的代码中

中对final变量赋初值(只有一次)

c、修改基本类型数据和引用类型数据

若为基本数据类型的变量,则其数值一旦初始化就不能改变;

如果是引用类型的变量,则在初始化后不能将其指向另一个对象。但引用值是可变的。

为什么局部内部类和匿名内部类只能访问局部final变量?

内部类和外部类处于同一水平,内部类不会随着方法的实施而被销毁,因为定义在方法中。

这里有一个问题:当外部方法结束时,局部变量将被销毁,但内部对象可能仍然存在(只有当没有人再次引用它时才会死亡)。这里有一个矛盾:内部对象访问了一个不存在的变量。

为了解决这个问题,将局部变量复制为内部变量,以便当局部变量死亡时,内部变量仍然可以访问,实际访问是局部变量。”copy"。这似乎延长了局部变量的生命周期。当局部变量被复制成内部变量时,必须确保这两个变量是相同的,即如果我们修改了内部变量,方法中的局部变量必须改变。如何解决这个问题?将局部变量设置为final。初始化后,我不会让你修改变量,以确保内部成员变量和方法的一致性。这实际上是一种妥协。使局部变量与内部类中建立的副本保持一致。

上一篇:

HDU4311(排序+二分)

下一篇:

使用容器