final关键字最简单明了的含义就是“无法改变的”,有三种使用情况:final数据,final方法和final类,另外,参数列表中也可以使用final,那意味着可以读参数,但是无法修改参数;
1、final数据
final数据有两种用途,一个是我们可以获得一个永不改变的“编译时常量”,另一个是定义一个在运行时被初始化的值,并且不希望它被改变。一个既是final又是static的字段只占据一段不能改变的存储空间。
当对基本类型的字段使用final时,意味着该字段的数值将不会改变;当对一个对象的引用使用final时,那意味着该对象的引用不会改变;JAVA允许定义一个final 字段时不进行初始化,也就是书上说的“空白final”,这就使得final关键字的使用有了更大的灵活性。我们可以定义一个final字段,让它根据对象的不同而有所不同,但是保证该对象的类型不改变。但是在使用空白final时,必须在字段的定义处或者构造器中对字段进行初始化。例如:












final可以作为参数列表中的参数,如以下代码:


















如果不是看书,我还真的不知道final还可以用于参数列表,但是在以前的编程练习中,好象也很少会有需要包参数列表定义为final的情况。
2、final方法
将方法定义为final有两个原因,一个是希望在继承过程中确保该方法的行为保持不变,不会被子类覆盖;另一个原因是考虑到效率,其实这个原因我自己也不是很理解,这里就只做一下笔记吧。
3、final类
如果把一个类定义为final,那么就意味着这个类永远都不会被继承,不允许有任何子类。对于一个final类,该类中任何方法都隐式的定义为final的,不会被其他类所覆盖。