Java之 final关键字

参考:
http://baijiahao.baidu.com/s?id=1601084106055683243&wfr=spider&for=pc
Java编程思想

final关键字的作用

在Java中,final关键字可以用来修饰成员函数,成员变量和类.。下面分别介绍。

1. final修饰数据

1.1 修饰类的成员变量

当final修饰成员变量时,此时表示常量,说明该属性是只读的。总得来说,final既可以修饰基本数据类型,也可以修饰对象引用。
1)必须被显式初始化值,而且只能被初始化一次。为被final修饰的成员变量赋值,有两种方式:1:直接赋值;**2:在构造方法中赋初值。**换句话说,JVM并不会为final常量执行默认初始化。一旦为final修饰的属性赋初值之后,就不能再改变了(即不能再次赋值)。
2)如果修饰的成员变量是基本类型,则表示这个常量的值不能改变。
3)如果修饰的成员变量是一个引用类型(对象引用),则表示引用的地址的值不能修改,但是这个引用所指向的对象的内容还是可以改变的。

1.2 修饰局部变量

而如果使用final修饰方法中的参数,则表明该参数只允许读,而不允许修改。

void f(final int i){// 局部变量示例
     i++; // can’t change(编译错)
}

2. final修饰方法

使用final方法的原因有2个。第一个原因就是将方法锁定,以防止任何继承类修改它,即明确禁止覆盖(重写)。具体来说,如果父类中有被final修饰的方法,那么子类不能覆盖(重写)该方法。第二个原因出于效率因素。这在Java早期实现是正确的,现在看来这个原因已不再被支持了。多说一句,出于效率考虑的意思就是将final方法直接嵌套在调用final方法的代码内(即相当于内联函数),这样就减少了方法调用时所产生的入栈、出栈、保存上下文等操作所带来的时间消耗。这一点和C++中的friendly修饰的方法很像。

2.1 final与private的关系

值得注意的是,Java中类中所有的private方法都隐式地被指定为final方法。可以在编写代码时对private方法添加final关键字,但这与不加final关键字效果是一样的。就像下面的代码所表现的,g方法和f方法实际上是一样的意思。

class WithFinal{
// Identical to "private" alone
	private final void f(){ System.out.println("WithFinal.f()")}
// Also automatically "final"
	private void g(){System.out.println("WithFinal.f()")}
}

上述代码实则表明,使用private修饰方法就相当于使用private final修饰方法。更进一步,上面的语句隐藏了一句很重要的话,private方法不允许被覆盖

3. final修饰类

final修饰类则表示该类不允许被继承,即该类永远不会有子类,比如熟知的String类。具体来说,1)被final修饰的类,final类中的成员变量可以根据实际需要设计为final。2) 一旦final修饰类,final类中的成员方法都会被隐式的指定为final方法。一般来说,我们通常都会将工具类设计成为一个final类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值