Java 的关键字 final
by emanjusaka from https://www.emanjusaka.top/2024/06/java-keyword-final 彼岸花开可奈何
本文为原创文章,可能会更新知识点以及修正文中的一些错误,全文转载请保留原文地址,避免未即时修正的错误误导。
在Java中,final关键字是一个多功能的修饰符,可以应用于类、方法和变量,具有不同的含义和限制。
一、最终方法
在一个类中,如果一个方法被声明为final,那么该方法不能被子类重写(Override)。这可以用来强制执行某些行为,确保方法的行为在其继承层次结构中保持一致。
这有助于设计更安全的类,防止错误的重写导致的逻辑问题。
public final void myMethod() {
// 方法体
}
二、最终类
当一个类被声明为final时,它不能被继承。这意味着不能有这个类的子类。
这通常用于那些设计为不希望或不需要被扩展的类,如String、Integer等Java核心类,以保护其内部实现细节或确保其行为的不变性。
使用final的好处包括提高程序的可读性和稳定性,减少错误,优化性能(尤其是在方法内联方面),以及帮助实现设计意图。它是Java中实现封装、继承和多态原则的一个重要工具。
public final class MyClass {
// 类体
}
三、最终变量
当一个变量被声明为final时,它的值在初始化之后就不能再改变。这意味着一旦赋值,就无法再次为该变量赋予新的值。
对于基本数据类型,这确保了值的不可更改性;对于对象引用,虽然引用本身不可变,但是所指向的对象内容(如果是可变对象)是可以修改的。
常常用于定义常量,习惯上使用全大写字母命名,并用下划线分隔单词。
public final int myFinalInt = 10;// 这个变量的值不能被改变
public final MyClass = new MyClass(); // 这个引用不能指向另一个对象,但对象的状态可以改变
四、匿名内部类中的变量
在匿名内部类中,如果一个变量被声明为 final
,即使它没有被显式初始化,也可以在匿名类中使用。
这是因为在 Java 8 之前,如果在匿名内部类中使用局部变量,该变量必须被声明为 final
。在 Java 8 之后,如果变量在匿名内部类中被使用,它会被隐式地认为是 final
。
以下是一个示例,演示了在匿名内部类中使用 final
变量的情况:
public class Example {
public void doSomething() {
final int x = 5;
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("x: " + x);
}
};
runnable.run();
}
public static void main(String[] args) {
Example example = new Example();
example.doSomething();
}
}
在上面的示例中,我们声明了一个 final
变量 x
,并在匿名内部类 Runnable
中使用它。即使 x
没有被显式初始化,编译器仍然允许在匿名内部类中使用它。
请注意,从 Java 8 开始,如果在匿名内部类中使用局部变量时,编译器将自动为该变量生成一个隐式的 final 副本。这意味着您可以在匿名内部类中访问该变量,但不能更改它的值。
在技术的星河中遨游,我们互为引路星辰,共同追逐成长的光芒。愿本文的洞见能触动您的思绪,若有所共鸣,请以点赞之手,轻抚赞同的弦。
原文地址: https://www.emanjusaka.top/2024/06/java-keyword-final
微信公众号:emanjusaka的编程栈