final关键字

final数据
  • 一个永不改变的编译期常量。这类常量必须是基本数据类型(包括字符串常量(String string = “ABC”)),并且以关键字final表示。在对这个常量进行定义时,必须对其进行赋值。(在编译期就可以确定其值的常量)
  • 一个在运行时被初始化的值,而不希望它被改变。对于基本类型,final使数值恒定不变;而用于对象引用,final使引用恒定不变,对象其本身却是可以修改的。
  • 一个既是static又是final的域只占据一段不能改变的存储空间。
  • 空白final。必须在每个构造器中用表达式对空白final进行赋值(核心:编译器需要确保空白final在使用前必须被初始化(对于既是static又是final的空白域,可以使用静态初始化块static{}赋值;对于在方法中声明的常量,在使用前进行赋值即可),这正是final域在使用前总是被初始化的原因所在)。
     
     class BFReference {
         BFReference() { System.out.println("Initialize blank final reference."); } 
     }	 
     public class BlankFinal {
        public final int initFinal = 0;
        private final int blankFinal;
        private final BFReference bfr;
        // Blank finals MUST be initialized in the constructor:
        public BlankFinal() {
   	     blankFinal = 1;
   	     bfr = new BFReference();
        }	
        public BlankFinal(int x) {
                blankFinal = x;
                bfr = new BFReference();
        }
    }
  • final参数
    • 参数列表中以声明的方式将参数指明为final,意味着无法在方法中更改参数引用所指向的对象;
    • 当基本类型的参数被指明为final时,可以读参数,但无法修改参数。这一特性主要用来向匿名内部类传递数据。
  • final声明对public元素的保护。在对象被构造出来之后,声明为final的元素便不能被再赋予其他值了。例如上面所示代码中的 “initFinal”,客户端程序可以读取和使用 “initFinal”,但是无法将其他值赋予 “initFinal”。
final方法
  • 使用final方法的原因:
    把方法锁定,以防任何继承类修改它的含义:确保在继承中使方法行为保持不变,并且不会被覆盖(设计)。只有在想要明确禁止覆盖时,才将方法设置为final的(考虑到Java语言的多态性,使用final关键字可以有效地“关闭”动态绑定)。
  • final和private关键字。类中所有的private方法都隐式地指定是final的。
final类
  • final类的域可以根据个人的意愿选择是或不是final。由于final类禁止继承,所以final类中所有的方法都隐式指定为是final的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值