java --- final

37 阅读2分钟

定义

final是一个修饰符,代表的是最终的意思,表示对象是最终形态的,不可改变的意思。

可以修饰变量、类、方法

特点

  1. 被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;
}
  1. 被final修饰的类不能被继承
final class Animal{}
// class Dog extends Animal{} // 编译错误
final class Dog extends Animal{} 
// class DaHuang extends Dog{} // 编译错误
  1. 被final修饰的成员方法不能被重写
class Animal{
    final int age = 18;
    public final void show(){}
}
final class Dog extends Animal{
    @Override
    // public void show(){} // 编译错误
}

final的注意事项

  1. 如果一个成员变量,在被定义的时候,并没有给初始值,会编译报错,所以必须给其赋值。

  2. 赋值方法有:

    • 直接赋值: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 指的是引用不能被更改。