final keyword 被应用于variables,method, 和class 。其含义是一旦应用final,它的值或状态就不能改变。
什么是java中的final变量?
如果我们对字段或成员变量应用final关键字,这些变量就会被视为常量,这意味着一旦变量被创建,并被赋值,其值就不能被改变。
final int value=20;
// Gives compile time error for the below line of code
value=40;
在上面的例子中:
- 初始化最终变量的值=20
- 下一行,将值改为40
- 编译器抛出了一个错误
Cannot assign a value to final variable 'value'
所以,只要字段的值一旦被初始化就不能改变,你就必须把字段作为final使用。
让我们来看看final对象
final ArrayList strs = new ArrayList();
strs.add("hello"); // no error
strs = null; // an error
- 在上面的例子中,创建了final arraylist变量
- 通过添加add方法改变了arraylist的状态,这被接受,final对象可以被突变。
- 下一行,将引用改为null,由于final引用不能分配给null或新对象,所以出现了编译错误。
什么是java中的final方法?
方法也可以用final 关键字来定义。一个final 方法不能在子类中被重写。
下面是一个final 方法的用法
class SuperClass {
public final void method1() {
}
public int method2() {
return 0;
}
}
class SubClass extends SuperClass {
// the following method throws Compile time exception as this method has
// been declared in Superclass.Final methods ca
public final void method1() {
}
// This works fine
public int method2() {
return 0;
}
什么是java中的最终类?
如果我们把类标记为final,这个类就不能被其他类扩展。
这使得该类成为某些特定的安全类。
java.lang.Math类中的大多数类都是final类。
如果我们扩展final类,编译器会抛出一个错误。
下面是final类的例子
public final class SuperClass {
}
// the following class throws Compile time exception as the Superclass declared
// as final
class SubClass extends SuperClass {
}
Final作为方法的一个参数
你也可以将final 关键字的参数传递给方法。这意味着这些参数不能被改变,而且是方法的局部参数。
public void getValue(final int i){
}
最终局部变量是否能提高性能
声明最终局部变量可以让编译器静态地优化代码并提高速度。