一 . final
含义:adj.最后的,最终的; 决定性的; 不可更改的。在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。
1)修饰成员变量、局部变量:在编写程序时,我们经常需要说明一个数据是不可变的,我们成为常量。在java中,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。更重要的是,final会告诉编译器,这个数据是不会修改的,那么编译器就可能会在编译时期就对该数据进行替换甚至执行计算,这样可以对我们的程序起到一点优化。针对引用类型和基本类型有点不一样。
class Value{ private int i; public Value(){ } public Value(int i){ this.i = i; } public int getI() { return i; } public void setI(int i) { this.i = i; } } public void finalTest(){ //基本数据类型 final int a ; a = 1; // a = 2; 编译提醒报错 final Value value = new Value(2); value.i = 3;//改变对象的属性值,编译没报错 // value = new Value(4);//新对象,编译报错 }
final修饰基本数据类型的时候,变量的值不可以改变;final修饰引用类型的时候,变量引用的对象的地址不可以改变(只能指向该对象,无法再指向其他对象),但是引用的对象是可以改变的。
2)修饰方法:方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。
class Value{ public final int test(){ return 1; } } class SubValue extends Value{ // @Override // public final int test(){//compilation error:override method is final // return 2; // } }
3)修饰方法参数:方法的形参使用final修饰,代表在这个方法里面该参数都无法被修改(基础数据类型无法修改,引用类型无法修改引用对象的地址)。
public void fianlParams1(final int i){ // i = 3;//compilation error: can not assign a value to final variable "i" } public void fianlParams2(final Value i){ // i = new Value(12);//compilation error: can not assign a value to final variable "i" }
4)修饰类:使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。
原文地址:https://www.cnblogs.com/knsbyoo/p/9032314.html
时间: 2024-11-05 16:02:23