Java零基础-final 关键字

  1. final 是一个关键字,表示 最终的,不可变的

  2. 修饰的类无法被继承

  3. 修饰的方法无法被覆盖

  4. 一旦赋值后,不可重新赋值【不可二次赋值】

  5. 修饰的实例变量,必须手动赋值,不能采用系统默认值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class FinalTest01 {

    // 成员变量之实例变量
    // 实例变量有 默认值 + final 修饰的变量不可二次赋值
    // 综合考虑,java 最终规定 实例变量 使用 final 修饰之后,必须手动赋值,不能采用系统默认值
    final int age; // 编译错误

    // 第一种解决办法
    final int age = 10;

    // 第二种解决方法
    final int num;
    public FinalTest01() {
    this.num = 200;
    }

    // 两种解决方法,本质上是一种方式,都是在构造方法执行过程当中给实例变量赋值

    public static void main(String[] args) {
    final int a;
    a = 100;
    // 不可二次赋值
    a = 200;
    }
    }

  6. 修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收。虽然指向某个对象之后不能指向其他对象,但是所指向的对象内部的内存是可以被修改的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class FinalTest02 {

    public static void main(String[] args) {
    // 创建用户对象
    User u = new User(100); // User u = 0x1234;

    // 又创建一个新的User对象
    // 程序执行到此表示以上对象已变成垃圾数据,等待垃圾回收器的回收
    u = new User(200); // u = 0x2345;

    // 创建用户对象
    final User user = new User(200);
    // user = new User(50); // final 修饰的引用,一旦指向某个对象之后,不能再指向其他对象,
    //被指向的对象无法被垃圾回收器回收
    user.id = 50; // 所指向的对象内部的内存可以被修改
    }
    }
  7. 修饰的实例变量,一般和 static 联合使用,被称为 常量

public static final 类型 常量名 = 值;

Java 规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接