final可以修饰变量、方法、类。
final修饰变量
- final修饰成员属性(变量)必须初始化;
- 修饰局部变量使用前必须初始化。
class Circle{
private final int a=1;
private int b;
private void f() {
final int a;
System.out.println(a);//这样会报错
}
}
- 注意
- final修饰的变量不能改变,本质来说:不可变的是变量的引用,而不是变量的内容。
- final修饰【引用类型】,其指向的对象的数据是可以修改的。但是它的地址不能变,即它不能再指向其它对象。
代码:
public class Test1 {
private int a = 33;
public static void main(String[] args) {
final Test1 test1 = new Test1();
test1 = new Test1(); //报错,指针不可修改
test1.a = 44;//对象数据可以修改
}
}
final修饰方法
- 方法不能被子类重写
class Base{
public final void f(){
}
}
class Child extends Base{
public void f(){ //不能重写父类final修饰得方法,编译不通过
}
}
final修饰类
- final修饰的是最终类,不能再被继承了。
这样是错误的
final class Base{
public final void f(){
}
}
class Child extends Base{ //不能被继承,父类是final修饰,编译不通过
}
网友评论