定义
final是一个修饰符,代表的是最终的意思,表示对象是最终形态的,不可改变的意思。
可以修饰变量、类、方法
特点
- 被final关键字修饰的变量是常量
public class Demo{
public static void main{
Animal a = new Animal();
System.out.println(a.age); // 18
// a.age = 19; // 编译错误
}
}
class Animal{
final int age = 18;
}
- 被final修饰的类不能被继承
final class Animal{}
// class Dog extends Animal{} // 编译错误
final class Dog extends Animal{}
// class DaHuang extends Dog{} // 编译错误
- 被final修饰的成员方法不能被重写
class Animal{
final int age = 18;
public final void show(){}
}
final class Dog extends Animal{
@Override
// public void show(){} // 编译错误
}
final的注意事项
-
如果一个成员变量,在被定义的时候,并没有给初始值,会编译报错,所以必须给其赋值。
-
赋值方法有:
-
直接赋值:final int age = 18;
-
有参构造函数赋值:new Animal("18");
-
public class Demo{
public static void main(String[] args){
Pig p = new Pig(18);
System.out.println(p.age);
}
}
class Pig{
final int age; // 或者 final int age = 18;
public Pig(int age){
this.age = age;
}
}
总结
1、final 关键字可以用于修饰成员变量、本地变量、方法以及类。
2、final 成员变量,必须在声明的时初始化或者在构造器中初始化,否则报编译错误。
3、final 变量不能再次赋值;final 方法不能被重写;final 类不能被继承。
4、在匿名类中,所有变量都必须是 final 变量。
5、接口中,声明的所有变量本身是 final 的。
6、final 和 abstract 这两个关键字是反相关的,final 类就不可能是 abstract 的。
7、按照 Java 编码规范,final 变量就是常量,而且通常常量名要大写。
8、对于集合对象声明为 final 指的是引用不能被更改。