final 可以用来修饰类、方法和实例域
final修饰的类不能被任何类继承(final类没有子类)
创建final类Animal
创建Cat类试图继承Animal,编译报错
典型的final类有String类
被final修饰的方法不能被子类重写
创建final修饰的run方法
Cat类试图重写run方法,编译报错
构建对象的时候必须初始化final修饰的实例域。也就是说必须保证在每个构造器执行之后,这个域被设置(当然也可以在创建实例域的时候就进行初始化),并且在后面的操作中,不能够再对它进行修改。
public class Animal { private final String name; public Animal(){ name = "dog"; } } public class Animal { private final String name = "dog"; }既然是不能修改的那set方法自然是不允许的,编译不通过
final修饰符大都应用于基本类型域,或不可变类的域(如果一个类中的每个方法都不会改变其对象,那么这个类就是不可变类。例如String类就是不可变类)。
对于用final修饰可变类(不建议),只是表示存储在变量中的对象引用不会再指向其他对象,换句话说就是存储在变量中的对象地址不变。不过这个对象是可以改变的。例:
public class Animal { private final StringBuilder sb; public Animal(){ sb = new StringBuilder(); } public void test(){ sb.append("test"); } }以上就是final关键字的三种用法。