Java提供了 final 关键字, 用于修饰不可改变内容。
final: 不可改变。可以用于修饰类、方法和变量。

  • 类:被修饰的类,不能被继承。
  • 方法:被修饰的方法,不能被重写。
  • 变量:被修饰的变量,不能被重新赋值。

使用方式

修饰类

  1. final class 类名 {
  2. }

查询API发现像 public final class String 、 public final class Math 、 public final class Scanner 等

修饰方法

修饰符 final 返回值类型 方法名(参数列表){     
//方法体 
}

修饰变量

局部变量——基本类型

基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。

public class Test {
    public static void main(String[] args) {
        final int a;
        // 第一次赋值 
        a = 10;
        // 第二次赋值,报错,不可重新赋值 
        // a = 11;
    }
}

局部变量——引用类型

引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改

public class Student {
    //成员变量
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("Student : name=" + name + ", age=" + age + ", sid=" + sid);
    }

}
public class Test {
    public static void main(String[] args) {
        final Student s = new Student();
       // s = new Student(); 报错,指向了新的对象,地址值改变。 
        s.setName("tom");
        s.setAge(16);
    }
}

成员变量

成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:
显示初始化

public class User {     
        final String USERNAME = "张三";     
        private int age; 
}

构造方法初始化

public class User {     
        final String USERNAME ;     
        private int age;     
        public User(String username, int age) {         
                this.USERNAME = username;         
                this.age = age;     
        } 
}

被final修饰的常量名称,一般都有书写规范,所有字母都大