Java中final关键字的多样魅力

yumo6666个月前 (06-13)技术文章78

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一文全掌握

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

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

导读final关键字在Java中有多种用途,可以用于修饰类、方法和变量。本文从常规使用场景、常见的误解、底层原理、jdk源码案例,常见使用场景等几方面全面剖析关键字的各个方面内容。帮助大家理解并使用该...

轻松掌握Java多线程 - 第六章:volatile关键字

学习目标1 内存可见性问题1.1 什么是内存可见性1.2 内存可见性问题的原因2 volatile的作用与使用场景2.1 volatile关键字介绍2.2 volatile的内存语义2.3 volat...

关于 Java 关键字 volatile 的总结

1 什么是 volatilevolatile 是 Java 的一个关键字,它提供了一种轻量级的同步机制。相比于重量级锁 synchronized,volatile 更为轻量级,因为它不会引起线程上下文...