根据上下文,java中final关键字的含义存在着细微的区别,但它通常指的是“不可改变的”不想改变可能有两种理由:设计和效率,由于这两个字差了很远,所以final可能被误用。
以下谈到了使用final的三种用法:数据,方法,和类。
- final修饰数据
1,一个永不改变的编译时常量。
2,一个在运行时被初始化的值,而你不希望它被改变。
3,在对常量进行定义的时候,必须对其进行赋值。
4,一个static又是final的域只占据一个不能改变的存储空间。
5,java允许空白 final,所谓空白final是指被声明为final但又未给定初值的域。
6,final修饰参数 java允许在参数列表声明的方式将参数指明为final。这就意味着你无法更改参数引用所指向的对象。例:
public class text {
public class FinalArguments {
void with(final Integer i) {
i = 1; //Illegal,i is final
}
void without(Integer i) {
i = 1;// OK
}
void f(final int i) {
//i++; can't change
}
int g(int i) {
return i + 1;
}//OK
}
- final修饰方法
1,把方法锁定,防止任何继承类修改它的含义。
2,效率问题,现版本jvm虚拟机已优化
3,类中所有的private关键字都隐式指为final,可以对private方法增添final修饰词,但并不会增加任何额外的意义。
- final修饰类
1,当某个类的整体定义为final时,表明你不打算继承该类,而且也不允许别人这么做,或出于安全的考虑,你不希望它有子类。
例:
public class text{
class SmartBrain{}
final class Diansaur{
int i= 7;
int j= 9;
SmartBrain smartBrain = new SmartBrain();
void f(){};
}
class FutherDia extends Diansaur{} //error:Cannot extend final class
class FutherBra extends SmartBrain{} //ok
}
个人简单总结,2017.10.21