1.final修饰类
可以使其不被继承(断子绝孙),一般是用于比较重要的类,防止其方法被重写
2.final修饰方法
用来保护父类的某个方法不希望被子类重写3.
3.final修饰属性
可以防止该属性被修改
public final double TAX_RATE=0.08;
修改final修饰的变量会报错
4.final修饰局部变量
final关键字定义的变量必须在声明时对其进行赋值操作。final修饰的局部变量不能被二次赋值修改,只能赋值一次。
5.final修饰引用
一旦一个对象引用被修饰为final后,它只能恒定指向一个对象,无法将其改变以指向另一个对象。即使被修饰为final的引用被赋值为null也算赋值一次。同时该空引用不会直接被垃圾回收器回收,只有在包含了该空引用的方法执行结束之后该引用才会被释放空间。
但是注意!,这个引用指向的对象内部是可以更改的,只是引用指向不能更改
final注意事项和细节
1.final修饰的量一般都叫常量,规范以XXX_XXXX_XXX命名
2.final修饰属性在定义时,必须赋初始值,并且以后不能再更改,赋值可以在如下位置之一(选择一个位置赋值即可)
(1)定义时
(2)在构造器中
(3)在代码块中
3.如果final修饰的属性是静态的,2的说法要变一下
(1)定义时赋值
(2)静态代码块里赋值//不可以在构造器里赋值
4.final类不可以继承,但是可以实例化对象
5. 类里含final方法,final修饰发方法不能重写,但是类可以继承,其余没有被final修饰的也可以重写
6.一般来说如果一个类已经是final类了,没必要把里面的方法修饰为final方法
7.final不能修饰构造方法(构造器)
8.final一般和static搭配使用效率更高
当你用public static int a=8;
在类的外面调用类名.a时会导致类加载
但是当你public final static int a=8;
你在别的类用类名.a是就不会导致类的加载
9.基本数据类型的包装类Integer,Double,Float,Boolean等以及String都是final类
不可以被继承
10.final修饰局部变量可以不初始化,之后再赋值,一旦赋值就不能该了