所谓空白final就是指不初始化后续再对其进行赋值,但是这个操作只能进行一次,也就是不能二次赋值,因为final是不能改变的。
public class Test {
private final int j;//空白final
public Test()
{
j = 1;//对final进行初始化
}
}
但是如果只有空白
final但是没有对其进行初始化的话会报
The blank final field j may not have been initialized
===========================================================================================================
final方法
使用final方法的原因有两个
1.把方法锁定,以防任何继承类修改它的含义,确保在继承中使方法行为保持不变,并且不会被覆盖。
2.以前是为了效率才使用final。在java早期,如果将方法指明为final,就是同意编译器将其转为内嵌调用。调用final命令时会和正常方式不一样,而是将参数压入栈,跳至方法代码处并执行,然后跳回并清理栈中内容,处理返回值。这样就消除了方法调用的开销,会提高效率,但是当放大很大是,程序代码就会膨胀,内嵌所带来的性能提高会因为花费于方法内的时间量而被缩减。 (这段书上是这么说,因为对底层实现不了解,所有也理解的不够透彻)
在最近的java版本中,已经不再需要final来进行优化了,有了新的技术来取代。在java SE5/6是,应该让编辑器自己去处理效率问题,只有在想要明确禁止覆盖时,才将方法设置为final。
===========================================================================================================
final与private关键字
类中所欲的private方法都隐式地指定为是final的。由于无法取用private方法,所有也就无法覆盖它。可以对private方法添加final修饰词,但不会增加任何意义。