Java 中的final关键字,在本教程中,我们将学习final
关键字的用法。final
关键字可以与变量,方法和类一起使用。我们将详细介绍以下主题。
1)final
变量
2)final
方法
3)final
类
final
变量
final
变量只不过是常数。初始化后,我们无法更改final
变量的值。让我们看看下面的代码:
输出:
我们在上面的程序中遇到了编译错误,因为我们试图更改final
变量MAX_VALUE
的值。
注意:在大写(CAPS)中使用常量名称被认为是一种好习惯。
空白的final
变量
在声明时未初始化的final
变量称为空白final
变量。我们必须在类的构造函数中初始化空白的final
变量,否则会抛出编译错误(错误:变量MAX_VALUE
可能尚未初始化)。
这是在类中使用空白final
变量的方式:
输出:
什么是空白的final
变量?
假设我们有一个Student
类,其中有一个名为Roll No
的字段。由于Roll No
不应该在学生注册后更改,我们可以将其声明为类中的final
变量但我们无法提前为所有学生初始化Roll No
(否则所有学生都会有相同的Roll No
)。在这种情况下,我们可以声明Roll No
变量为空白的final
,我们在对象创建期间初始化此值,如下所示:
输出:
更多关于 StackOverflow 和 Wiki 的空白final
变量。
未初始化的静态final
变量
声明期间未初始化的静态final
变量只能在静态块中初始化。例:
输出:
final
方法
final
方法无法覆盖。这意味着即使子类可以调用父类的final
方法而没有任何问题,但它不能覆盖它。
例:
上面的程序会抛出一个编译错误,但是我们可以在子类中使用父类final
方法而不会出现任何问题。让我们来看看这段代码:这个程序运行正常,因为我们没有覆盖final
方法。这表明final
方法可以继承,但它们不符合覆盖的条件。
输出:
final
类
我们不能扩展final
类。考虑以下示例:
输出:
要记住的要点:
1)构造函数不能被声明为 final。
2)本地final
变量必须在声明期间初始化。
3)接口中声明的所有变量默认为 final。
4)我们无法改变final
变量的值。
5)final
方法不能被覆盖。
6)final
类不被继承。
7)如果方法参数被声明为final
,则不能更改这些参数的值。
8)以所有大写字母命名final
变量是一个好习惯。
9)final
,finally
和finalize
确定了三个不同的术语。finally
用于异常处理,finalize
是在垃圾收集期间由 JVM 调用的方法。