1、final关键字的常见用法
- final关键字是一个关键字,表示是最终的,不可变的。
- final关键字修饰的类无法被继承。
- final关键字修饰的方法无法被重写覆盖。
- final关键字修饰的变量
一旦赋值以后
,不可重新赋值。【不可二次赋值】- final关键字修饰的实例变量必须手动赋值,不能采用系统的默认值。【系统默认值不可修改】
- final关键字修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为“常量”。
1.1、final关键字修饰实例变量
java语言规定实例变量使用final关键字修饰之后,必须手动赋值,不能采用系统默认值。
以上语法的解释分析如下:
- 首先我们了解实例变量属于成员变量,如果不进行初始化处理,那么系统将会默认赋值为【0值】,而恰好经过final关键字修饰过后的变量一旦被赋值以后将无法进行重新赋值。这就意味着实例变量在还未初始化时,其值已经固定不变为【0值】,这样的做法是不合适的,因此便有了以上这个语法。
若是想对final修饰的实例变量进行赋值的话有什么方法吗?
- 方法一:按照语法规则在定义时进行手动赋值
final int age = 10;
- 方法二:先定义,再在构造方法内进行初始化赋值
final int age; public finalTest(){ this.age = 10; }
分析:从本质上看,此两种方法是一样的,因为都是在构造方法执行的过程中给实例变量赋值。因为方法一中的age也必须要在对象创建后才存在的,只有new了对象才能谈实例变量。因此它和方法二中的age的产生时刻是一致的,并且赋值也是一致的。因此这两种方法本质就是一种方法。
1.2、final关键字修饰引用
final关键字修饰引用一旦指向某一个对象之后,不能再指向其他对象了。
分析:
其实这一点也很好理解,当一个 被final修饰的引用(变量),它指向了一个对象之后,也就是说,这个引用已经保存了一个内存地址了,此时若让此引用去保存其它地址,相当于对一个final修饰的关键字进行了重新赋值。这显然是不合法的。
实例:
//创建对象1
User u = new User(10);//引用u中已经保存了一个地址0x1234
//又创建了一个新的User对象
//程序执行到此处,引用u中之前的地址(0x1234)将被重新覆盖,其指向的对象已变成垃圾数据,等待垃圾回收器的回收。
u = new User(23);
final User user = new User();
//user = new User(22);//final修饰的引用一旦指向某个对象后,不能再指向其他对象。
1.3、final修饰实例变量与static联用称常量
常量的语法格式:
public staic final 类型 常量名 = 值
java命名规范中,所有的常量的名字全部大写,并且单词间用下划线连接。