Java中的final关键字

  • 1. final修饰变量:使用final修饰的变量是一个常量,一旦被赋值后就不能再改变。常量一般使用大写字母命名。例如:
  • 2. final修饰方法:使用final修饰的方法不能被子类重写。例如:
  • 3. final修饰类:使用final修饰的类不能被继承。例如:
  • 4. final修饰形参:使用final修饰的形参在方法内部不能被修改。例如:
  • 5. final修饰引用变量:使用final修饰的引用变量不能再指向其他对象,但是对象本身的值可以修改。例如:
  • 注意:在多线程编程中,使用final关键字可以保证线程安全性,因为final字段在对象构造完成后就不可变,不会出现多线程修改导致的问题。



在Java中,final关键字有以下几种用法:

1. final修饰变量:使用final修饰的变量是一个常量,一旦被赋值后就不能再改变。常量一般使用大写字母命名。例如:

final int MAX_VALUE = 100;

2. final修饰方法:使用final修饰的方法不能被子类重写。例如:

public class Parent {
    public final void print() {
        System.out.println("Parent's print method");
    }
}

public class Child extends Parent {
    // 编译报错,无法重写父类的final方法
    // public void print() {
    //     System.out.println("Child's print method");
    // }
}

3. final修饰类:使用final修饰的类不能被继承。例如:

public final class FinalClass {
    // 类的内容
}

// 编译报错,无法继承final类
// public class ChildClass extends FinalClass {
//     // 子类的内容
// }

4. final修饰形参:使用final修饰的形参在方法内部不能被修改。例如:

public void print(final String message) {
    // 编译报错,无法修改final形参
    // message = "Hello, world!";
    System.out.println(message);
}

5. final修饰引用变量:使用final修饰的引用变量不能再指向其他对象,但是对象本身的值可以修改。例如:

final StringBuilder builder = new StringBuilder("Hello");
builder.append(", world!"); // 可以修改对象的值

// 编译报错,无法再指向其他对象
// builder = new StringBuilder("Goodbye");

注意:在多线程编程中,使用final关键字可以保证线程安全性,因为final字段在对象构造完成后就不可变,不会出现多线程修改导致的问题。