final
是一个关键字,表示 最终的,不可变的修饰的类无法被继承
修饰的方法无法被覆盖
一旦赋值后,不可重新赋值【不可二次赋值】
修饰的实例变量,必须手动赋值,不能采用系统默认值
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
26public 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;
}
}修饰的引用,一旦指向某个对象之后,不能再指向其他对象,那么被指向的对象无法被垃圾回收器回收。虽然指向某个对象之后不能指向其他对象,但是所指向的对象内部的内存是可以被修改的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public 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; // 所指向的对象内部的内存可以被修改
}
}修饰的实例变量,一般和
static
联合使用,被称为 常量
public static final 类型 常量名 = 值;
Java 规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接