前言
final是java中的关键字,它是一个修饰符,可以修饰变量、方法和类。
目录
- final修饰变量
- final修饰方法
- final修饰类
一、final修饰变量
- 被final修饰的变量不可改变,但仅仅是引用的地址不可改变,不代表引用的对象不可变。例如:
final int[] array={1,2,3,4,5};
array[0]=0;
for(int t:array){
System.out.println(t);
}
以上代码的执行结果为:
0
2
3
4
5
以上代码中:array引用的地址没有改变,但引用的对象发生了变化。
- 被final修饰的变量如果是类的成员变量,则必须在定义时就初始化,否则如果没有在定义时初始化,则必须在构造函数中初始化(如果有多个构造函数,则每个构造函数都得将其初始化),例如:
public class Person {
private String name;
private final int age;
public Person(){
age=1;
}
public Person(String name) {
this.name=name;
age=2;
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
}
二、final修饰方法
- 被final修饰的方法不能被子类重写,但可以被重载。
- 被final修饰的方法必须要有实现代码,即final不能修饰抽象方法。
三、final修饰类
- 被final修饰的类不能被继承,也就是说被final修饰的类不能有子类。
- 根据上一条可得出,final不可修饰抽象类或接口。因为被final修饰的类不能被继承,所以final修饰的抽象类毫无意义,因此java规定了final不能修饰抽象类或接口,否则编译器将报错。