final关键字 2
Updated:
Contents
1. 对于基本类型
final使数值恒定不变,而对于对象引用,final使引用恒定不变(只能引用这个对象),但引用的对象是可以变的。相当于c++中的 const Person *p = p1;// p里的地址不能变,而地址对应的内容可以变。
2. final参数:
在参数列表中以声明的方式将参数指明为final,这意味着无法在方法中更改引用变量,但引用变量所指向的对象的内容是可以变的。
3. final方法:
一般只有在想明确禁止重写(覆盖)时,才将方法设置为final的。也可以这样理解,为了保留此参数列表形式的方法, 在继承此类时,可以通过重载此方法的名字,衍生出更多的形式,但仍可以通过super关键字调用父类的此方法。
4. final和private:
类中所有的private方法都隐式地指定为是final的。由于无法取用private方法,所以也就无法重写(覆盖)它。可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。
5. final类:
当将某个类的整体定义为final时,就表明了你不允许继承该类,相应的类方法也就是final的了,不能被继承嘛。换句话说,出于某种考虑,你对该类的设计永不需要做任何变动,或者出于安全的考虑,你不希望它有子类。 这个要慎用。
补:
现代java的容器库用ArrayList替代了Vector。ArrayList要合理的多
HashMap替代了Hashtable
补:空白final:
所谓空白final是指被声明为final但又未给定初始值的域。
不管什么情况,编译器都确保空白final在使用前必须被初始化。但空白final在关键字final的使用上提供了更大的灵活性,为此,一个类中的final域就可以做到根据对象而有所不同,却又保持其恒定不变的特性。
1 | class Person{ |