Java 的关键字 final

本文发布于 2024年06月13日,阅读 14 次,点赞 0 次,归类于 Java

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 副本。这意味着您可以在匿名内部类中访问该变量,但不能更改它的值。

IMG_0761

在技术的星河中遨游,我们互为引路星辰,共同追逐成长的光芒。愿本文的洞见能触动您的思绪,若有所共鸣,请以点赞之手,轻抚赞同的弦。

原文地址: https://www.emanjusaka.top/2024/06/java-keyword-final

微信公众号:emanjusaka的编程栈