final关键字

 
final的字面意思是指无法改变,但是不同的情况下使用,会有些许区别
final成员变量
当final修饰一个类的成员变量时,表示该成员变量是常量,这句话需要解释一下:
如果该成员变量的类型是预定义类型,说明该变量值不可修改;如果该成员变量的类型是自定义类型,则该变量只是引用,那么该引用不能再指向别的对象,而对象的值却是可以修改的。
       注意:
1)当我们使用static final+预定义类型变量来表示一个静态常量的时候,变量名应该全部用大写字母,并且单词之间用下划线分隔。
       2)使用final修饰的成员变量一定要立刻初始化其值。
final参数
       final修饰形式参数,意味着函数内部不可以让参数引用其它的对象,但是如果对象提供了修改内部数据的方法比如setValue,仍然可以调用,下面的例子是合法的:
public class HelloDate
{
    public static void main(String[] args)
{
       MyNumber n= new MyNumber(2);
       f(n);
    }
   
    public static void 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类的成员变量没有自动成为final成员变量。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值