三种情况: 数据、方法和类
1、数据
当final关键字修饰基本数据时,表达的含义是,永不改变的编译时常量;
如:final int data = 1;
修饰对象引用时,它代表的意思是,其对象的引用不变,对象中的内容可以改变;但该引用不可以指向另一个对象
如:final int[] array = new int[4];
array[0] = 1;
//下面为错误示例
int[] array1 = new int[4];
array = array1;
特殊一点:Java允许生成被声明为final但又未给定初始值的域,但必须在构造器中初始化,如下:
public class Demo{
//未赋值
final int data;
Demo(){
data = 1;
}
}
用final修饰方法中参数
void add(final int data){}
你可以读参数,但无法修改参数。它主要向匿名内部类传递数据。java是值传递,基本类型改变了值,也只会在局部中生效。引用类型则会对外也产生影响。
内部类形参必须使用final修饰
public class OuterClass {
public void display(final String name){
class InnerClass{
void display(){
System.out.println(name);
}
}
}
}
这是因为内部类和外部类需要保持一致,内部类使用name这个变量,是需要copy一份。加入final防止外部改变了其地址,导致数据出现不一致。
2、方法
使用final方法的主要原因:锁定方法,防止被继承中的类覆盖修改方法含义。
private修饰的方法,隐式的指定为final修饰。
3、类
即不允许别人继承你的类时,则使用final修饰类。而且final类中的方法也间接地隐式指定为final,无法覆盖。
比如Java中的String类Integer类等都被指定为final
网友评论