【JAVA】final关键字

final关键字

参考资料:【Thinking in JAVA】

修饰变量

  • final修饰变量时,必须在定义处或者每个构造器中对变量进行赋值,确保final域在使用前肯定被初始化;
    ①修饰基本类型或者包装类直接赋值时,变量的值恒定不变;
    ②修饰类的引用或者数组时,引用恒定不变;
    (一旦引用被初始化指向一个对象,就无法改为指向另一个对象,但是对象本身的内容是可以被修改的)

1.一个永远不变的编译时常量;
当final修饰基本数据类型或者String类型且直接赋值的变量,并在定义时赋值,那么在程序编译时,就可以确认该变量的值,这类变量称之为编译期常量;
特点:定义时必须赋值,必须是基本数据类型或者是直接赋值的String类型;
优点:编译器在编译时可以将常量值代入到任何使用它的计算式中,可以编译时执行这些计算式,减少运行时负担;
缺点:当编译期常量值变更时,需要重新编译所有引用它的类,改变才会对于这些类生效,未编译的类则还是使用旧值;

2.一个在运行时被初始化的值,而你不希望它被改变;
特点:在成员所属类的每个构造器中进行赋值;

空白final:指被声明为final但是又未在定义处给定初值的域,但是在任何情况下,编译期会确保空白的final在使用前必须被初始化;空白final给关键字final的使用提供了极大的灵活性,对于一个类来说,就可以做到每个实例,final成员给不相同,又恒定不变;[Think in JAVA]

final参数:在函数的参数列表中,以声明的方式将参数指定为final,这样可以读取参数,但无法在函数中更改参数引用所指向的对象或者基础数据类型、String类型的值;

修饰方法

特点:
1.锁定方法:设计时考虑类的继承中,使方法行为保持不变,并且不会被覆盖;
2.执行效率:使用final修饰方法,则编译器可以将针对该方法的所有调用转为内嵌调用;

privatefinal:类中所有的private方法都隐式的被指定为final的,由于无法取用private的方法,也就无法覆盖它,所以当使用final修饰private方法,不会为该方法添加任何额外的含义;

修饰类

类整体定位为final时,该类不能被继承,该类的成员可以根据需要选择是final或者不是final;但是final类中的所有的方法也会被隐式的声明为final类型,因为无法集成覆盖它们;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值