java中final关键字使用示例详解


在Java中,`final`关键字是一个非常重要的修饰符,它可以用于类、方法和变量。下面是`final`关键字在不同情况下的使用示例及详解:

### 1. `final`修饰变量

当`final`修饰变量时,该变量的值在初始化之后就不能被改变。这包括基本数据类型的变量和对象的引用,但请注意,对于对象引用,`final`确保的是引用不变,对象本身的状态是可以改变的。


public class FinalExample {
    // final修饰的静态变量,在类加载时初始化
    public static final String STATIC_FINAL_VARIABLE = "Static Final Variable";

    // final修饰的实例变量,在创建对象时初始化
    private final int finalInstanceVariable = 10;

    public void display() {
        // final修饰的局部变量,在声明时或代码块中初始化
        final double localFinalVariable = 3.14;
        System.out.println(STATIC_FINAL_VARIABLE);
        System.out.println(finalInstanceVariable);
        System.out.println(localFinalVariable);

        // 尝试修改final变量的值会导致编译错误
        // finalInstanceVariable = 20; // 编译错误
        // localFinalVariable = 3.14159; // 编译错误
    }

    public static void main(String[] args) {
        FinalExample example = new FinalExample();
        example.display();
    }
}

### 2. `final`修饰方法

`final`修饰的方法不能被子类覆盖(重写)。这通常用于确保方法的行为在继承体系中保持不变。


public class Parent {
    public final void display() {
        System.out.println("This is a final method.");
    }
}

// 尝试在子类中重写final方法会导致编译错误
/*
class Child extends Parent {
    @Override
    public void display() { // 编译错误
        System.out.println("This will not compile.");
    }
}
*/

### 3. `final`修饰类

`final`修饰的类不能被继承。这通常用于设计那些不希望被扩展的类,例如String类。


public final class FinalClass {
    // 类体
}

// 尝试继承final类会导致编译错误
/*
class AnotherClass extends FinalClass { // 编译错误
    // 类体
}
*/

总结,`final`关键字在Java中用于限制变量的可变性、方法的可覆盖性和类的可继承性,从而提高了代码的健壮性和安全性。