final关键字

2982人阅读 评论(0) 收藏 举报
 
final的字面意思是指无法改变,但是不同的情况下使用,会有些许区别
final成员变量
当final修饰一个类的成员变量时,表示该成员变量是常量,这句话需要解释一下:
如果该成员变量的类型是预定义类型,说明该变量值不可修改;如果该成员变量的类型是自定义类型,则该变量只是引用,那么该引用不能再指向别的对象,而对象的值却是可以修改的。
       注意:
1)当我们使用static final+预定义类型变量来表示一个静态常量的时候,变量名应该全部用大写字母,并且单词之间用下划线分隔。
       2)使用final修饰的成员变量一定要立刻初始化其值。
final参数
       final修饰形式参数,意味着函数内部不可以让参数引用其它的对象,但是如果对象提供了修改内部数据的方法比如setValue,仍然可以调用,下面的例子是合法的:
publicclass HelloDate
{
    publicstaticvoid main(String[] args)
{
       MyNumber n=new MyNumber(2);
       f(n);
    }
   
    publicstaticvoid f(final MyNumber n)
    {
       n.setValue(5);
       System.out.print(n.getValue());
    }
}
 
 
final成员函数
       final修饰成员函数可以防止派生类重写该函数。
       final修饰成员函数同时也就是向编译器发出内联的建议,但是就如同c++中的inline使用原则一样,通常不应该出于效率的原因发出这种建议,而是要等到性能分析器发现该成员函数因为频繁调用并且体积较小可以通过内联提高性能时才使用。当然作为底层类库的设计可能是个例外。
       通常情况下,如果没有充分的理由,尽量不要将一个成员函数设计为final。
       注意,private成员函数也是final成员函数,所以,虽然派生类可以提供一个和父类声明相同的成员函数,但是在java里,这不被视为重写,而被认为增加了一个新的成员函数,恰巧同名而已。这和c++不一样,c++中private虚函数仍然可以被子类继承并且重写,但是子类不能访问而已。

 

 

       使用final修饰类是为了阻止该类被继承,并且该类的所有成员函数都隐式的被定为final成员函数,也就是不允许被重写,所以没有必要手动为这些函数增加final关键字。
但是final类的成员变量没有自动成为final成员变量。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5164222次
    • 积分:64000
    • 等级:
    • 排名:第29名
    • 原创:1203篇
    • 转载:22篇
    • 译文:1篇
    • 评论:1140条
    文章分类
    最新评论
    算法专家朋友的博客
    清如许的博客