Java中final关键字的多样魅力

Java中final关键字的多样魅力

在Java编程的世界里,final关键字就像是一位低调却实力非凡的角色。它不是那种让人一眼就惊艳的存在,但只要你深入接触,就会发现它在不同场景下展现出来的独特魅力。今天,咱们就来好好聊聊这位“隐形英雄”的多种使用场景。



final修饰变量:不可更改的承诺

先来说说最基础的用法——修饰变量。当一个变量被final修饰后,它的值一旦被初始化,就再也不能改变了。这就好比给这个变量立下了“军令状”,承诺从此以后它将永远保持初始状态。

public class FinalVariableExample {
    public static void main(String[] args) {
        final int immutableNumber = 10;
        // immutableNumber = 20; // 编译错误!
        
        System.out.println("immutableNumber is still " + immutableNumber);
    }
}

在这个例子中,immutableNumber被final修饰,尝试重新赋值会直接导致编译错误。这种特性特别适合用来定义常量,比如圆周率π,一旦确定就不会再改变。

final修饰方法:锁定功能实现

接下来是final修饰方法的情况。当你在父类中使用final修饰某个方法时,就意味着这个方法在子类中不能被重写。这就好像是为方法设置了一个“禁止改装”的标志,防止子类随意更改其原有行为。

public class FinalMethodExample {
    public static void main(String[] args) {
        ParentClass parent = new ChildClass();
        parent.showMessage();
    }
}

class ParentClass {
    final void showMessage() {
        System.out.println("This message cannot be overridden.");
    }
}

class ChildClass extends ParentClass {
    // void showMessage() { // 编译错误!
    //     System.out.println("Attempt to override final method");
    // }
}

在这个例子中,showMessage方法被声明为final,所以即便在ChildClass中尝试重写它也会触发编译错误。这对于那些希望确保某些核心逻辑不会被意外修改的场合非常有用。

final修饰类:类的神圣不可侵犯

最后,我们来看看final修饰类的情形。一个被final修饰的类是无法被继承的,这意味着这个类的设计者希望这个类的状态完全固定下来,不允许有任何变化的空间。

public final class FinalClassExample {
    private String name;

    public FinalClassExample(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// public class DerivedClass extends FinalClassExample { // 编译错误!
//     public DerivedClass(String name) {
//         super(name);
//     }
// }

在这里,FinalClassExample本身是一个final类,因此任何企图从它派生出新类的行为都会遭到编译器的拒绝。这种做法通常用于那些设计为工具类或者具有特定用途且不应被扩展的类。



总结

通过上述几个方面,我们可以看到final关键字在Java语言中的多重角色。无论是作为变量的守护者、方法的安全卫士还是类的保护屏障,final都以其独特的方式保障了程序的稳定性和一致性。掌握了这些技巧,相信你在编写更健壮、更可靠的Java代码时会更加得心应手。


相关文章

Java关键字:final,static,this,super

1. final 关键字:final 关键字,意思是最终的、不可改变的,初始化之后就不能再次修改 ,用来修饰类、方法和变量,具有以下特点:final 修饰的类不能被继承,final类中的所有成员方法都...

你总用的 Java Volatile 关键字,真的理解透了吗?

作为互联网大厂的后端开发人员,在多线程编程的 “战场” 上,你是否遭遇过这样的 “诡异事件”?明明已经对共享变量进行了修改,可其他线程却像被施了 “障眼法”,读取到的依旧是旧值;又或者程序运行时突然冒...

吊打面试官(五)--Java关键字volatile一文全掌握

前言 volatile 是 Java 中的一个关键字,用于声明变量。当一个变量被声明为 volatile时,它可以确保线程对这个变量的读写都是直接从主内存中进行的。这也是面试官最爱问的点,接下来我们详...

吊打面试官(七)--Java语言static关键字一文全掌握

导读static关键字在Java中用于创建类级别的成员,这些成员不属于类的任何特定实例,而是属于整个类。static可以用于修饰变量、方法、代码块和内部类。本文从基础使用,使用问题,使用场景,底层原理...

Java并发编程中的volatile关键字深度解读

Java并发编程中的volatile关键字深度解读提到Java中的关键字volatile,我们常常会联想到它与线程安全的紧密关系。作为一个经常出现在面试题中的"明星"关键字,volat...