Final

Final

         final从它的字面含义“最终的,最后的”可以理解,这个关键字代表的不可变动。

    它可以用来修饰变量、参数、方法和类。

变量

         当变量类型为基本类型时,指定该变量为常量,在编译期指定该变量是不可变的。对于编译期常量的这种情况,编译器可以将该常量值代入任何可能用到它的计算式中,也就是说,可以在编译期就执行计算式,这减轻了一些运行时的负担。编译器会在该常量的使用处直接替换为相应的值。

    当变量为对象时,指定该变量引用不会发生变化。但是对象本省是可以变化的。

    变量必须在使用前进行赋值,可以是在定义的时候也可以是在构造时进行赋值。

    一个即是static又是final的域只占一段不能改变的存储空间,一个不可变的类变量,所有实例都是用它,但都不可对他进行更改。该变量一定要在定义时赋值,无法通过构造器来赋值,因为static变量初始化要早于构造器的初始化。

    接口中定义的变量,默认为public static final的。

参数

         参数为final时,意味着无法改变参数对象。

方法

         方法指定为final的,有2种情况。

一种是把方法锁定,防止该方法被override。这个是出于设计的考虑。

另外一种是提升执行效率。一个final方法,编译器在调用时使用的是内嵌调用的方式,当编译器发现一个final方法调用命令时,它会根据自己的谨慎判断,跳过插入程序代码这种正常的调用方式而执行方法内嵌调用机制(将参数压入栈,跳至方法代码处执行,然后跳回并清理栈中的参数,处理返回值),并且以方法体中的实际代码的副本来代替方法调用。这将消除方法调用的开销。等同于方法体代码直接写在调用处。但是我在实际的测试代码中,发现final方法的调用速度不是每次都比非final方法快,挺奇怪的,理论上会快但实际上确不一定。

    private方法默认为是final的。

         类为final时表明该类不可被继承,且所有方法默认为final的。例如:String类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值