1.final变量
final可以用来声明变量,一旦被final修饰,则该变量不可改变。
public class TestFinal {
private String name;
//用大写字母定义,中间使用下划线
private final int AGE;
//public static final修饰的变量只能在这里初始化
public static final int MONEY=30;
//两种构造方法赋值都可以
public TestFinal(String name) {
this.name=name;
AGE=9;
}
public TestFinal(String name,int AGE) {
this.name=name;
this.AGE = AGE;
}
}
final定义的实例域必须在构建对象时必须要初始化,否则会编译报错。初始化的方式一般有赋值和构造器中赋值两种。如果是public static final修饰的全局常量,则只能直接赋值,static优先于对象的构建。
2.final方法
被final修饰的方法不能被重写。
a)一个private方法会被隐式的指定为final方法
b)如果父类中有final方法,则不会被子类重写
final void test(){}
3.final类
定义为final的类不能被继承。
如果一个类在设计的时候不想被继承,并且不想被其他的类改动,那么可以将该类用final定义。比如工具类的定义,String就是不可变类。不可变类可以安全地在多个线程间共享其对象。
final class test{
}
4.总结
另外有一种说法是final是否对性能有提升,有些人认为可以,有些人认为不可以。
个人觉得主要还是final在设计上的优化。