1)final 修饰常量 :可以将该常量代入任何可能用到它的表达式中,在编译器中执行运算,在该常量定义的时候应该进行赋值。
2)final 修饰引用:一旦引用指向了一个对象,就无法再指向另外一个对象(对象v1)
import java.util.Random;
class Value{
int i;
public Value(int i){
this.i = i;
}
}
public class finaldemo {
private static final int s1 =new Random().nextInt(3) ;//类加载时加载,不随着创建新的对象改变值
private static final Value v1 = new Value(1);
public static void main(String[] args) {
//v1 = new Value(2);The final field finaldemo.v1 cannot be assigned
v1.i = 2;//虽然无法更改引用所指向的对象,但是,对象本身还是可以修改的
finaldemo demo1 = new finaldemo();
System.out.println(demo1.s1);
finaldemo demo2 = new finaldemo();
System.out.println(demo1.s1);
}
}
3)JAVA 允许生成 空白final(申明为final 但是又未给定初值的域),无论什么情况编译器都确保空白final 在使用前被初始化。
4)final 参数,意味着无法再方法中更改参数所指向的对象
class person{
}
public class demo2 {
void with(final person p){
//p = new person(); illegal
}
}
5)final 方法,把方法锁定,任何子类无法覆盖此方法
class Father{
final void Money(){
}
}
public class Son extends Father{
// void Money(){ //Cannot override the final method from Father
//
// }
}
6)final类 该类无法被继承
final class Father{
final void Money(){
}
}
public class Son extends Father{//The type Son cannot subclass the final class Father
}