01.final类
如果一个类使用了final关键字修饰,那么他就无法被继承,例如很常见的String类就是final类。
不过,类是可变的,并不意味着该类的对象是不可变的。
public final class Writer {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Writer writer = new Writer();
writer.setName("沉默王二");
System.out.println(writer.getName()); // 沉默王二
02final方法
被final修饰的方法不能被重写,否则会出现编译错误。
03final变量
被 final 修饰的变量无法重新赋值。
1)final修饰的基本数据类型
栗子:
final int age=18;
age的量就不能再被改变
2)final修饰的引用类型
在举个栗子,声明一个普通的类Pig,他有一个字段name
public class Pig {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在测试类中声明一个 final 修饰的 Pig 对象:
final Pig pig = new Pig();
如果尝试将 pig 重新赋值的话,编译器同样会生气

但我们仍然可以去修改 Pig 的字段值:
final Pig pig = new Pig();
pig.setName("特立独行");
System.out.println(pig.getName()); // 特立独行
3)final 修饰的字段
final 修饰的字段可以分为两种,一种是 static 的,另外一种是没有 static 的,就像下面这样:
public class Pig {
private final int age = 1;
public static final double PRICE = 36.5;
}
非 static 的 final 字段必须有一个默认值,否则编译器将会提醒没有初始化:

static 的 final 字段也叫常量,它的名字应该为大写,可以在声明的时候初始化,也可以通过 static 代码块初始化。
- final 修饰的参数
final 关键字还可以修饰参数,它意味着参数在方法体内不能被再修改:
public class ArgFinalTest {
public void arg(final int age) {
}
public void arg1(final String name) {
}
}
如果尝试去修改它的话,编译器会提示以下错误:

409

被折叠的 条评论
为什么被折叠?



