final关键字
1.对于类而言,final可以让该类不可被继承,但可以实例化对象
2.对于方法来说,final可以让该方法不能被重写(覆盖),但可以重载
3.对于变量来说,final让变量的值不能被修改,即final变量是常量,要按照常量命名规范(字母大写,用下划线_连接),在①定义时 ②构造器中 ③代码块 这三个位置任选其一来进行常量初始化,但如果是static属性,那就只能是定义时和在代码块中初始化,因为构造器使用时已经是在新的对象空间中了,这不符合static的原则
经典面试题
final关键字的作用
注意,①只有final类的时候才不能被继承,至于final方法,final属性是可以被继承的,只是不能被重写(覆盖)和修改
②一般,类如果是final的,那么方法就没必要final了,因为别人根本继承不了你,更不用谈重写了,至于构造器是直接不能加final,语法会报错
③包装类(Integer,Boolean,Double,Float等都是final),String也是final
④如果我们只想获取以下某个静态变量的值,并且是不加载类的情况下获取,那么我们可以使用final + static 的组合,底层编译器会做优化处理
public class Test { public static void main(String[] args) { System.out.println(A.a); } } class A{ public static int a = 10; //没有final static { System.out.println("静态代码块......."); } }
运行结果是
静态代码块.......//类被加载
10
当我们加上final时
public class Test {
public static void main(String[] args) {
System.out.println(A.a);
}
}
class A{
public final static int a = 10;
static {
System.out.println("静态代码块.......");
}
}
运行结果
10 //类没有被加载