使用final主要是三种情况。
1. 数据
- 修饰编译器常量,必须是基本数据类型,在定义时赋值;
- 对象引用或是数组,引用恒定不变,不能指向另一个对象,但对象的内容可以改变。
空白final
- 指声明为final但未给定初值,编译器确保使用前必须初始化;
- 必须在域的定义处或每个构造器中赋值;
- 局部变量,使用前赋值就可以。
fianl参数
- 在参数列表中声明参数为final类型,无法在方法中修改引用指向的对象。
- 主要用于向匿名内部类传递数据。
2. 方法
- 将方法锁定,防止继承类修改它的含义;
- 效率,转为内部调用,但现在虚拟机没什么性能提高了;
- 类中所有private方法隐式指定为fianl方法;
- HashTable类中不含有任何final方法;
3. 类
- 不能继承该类,比如众所周知的String类;