根据惯例,既是static又是final的域(即编译常量)将用大写表示,并使用下划线分割各个单词。Final关键字对于基本类型,会使其数据恒定不变。
但对于对象引用,final使得引用恒定不变--一旦引用被初始化指向某个对象,就无法再把它改为指向另一个对象,然而对象其自身是可以修改的。
这一限制,同样适用于数组,因为他也是对象。
空白final:java允许生成“空白final”---指生命为final但未初始化的域。
这样在类中的final域就可以根据对象而有所不同,却又保持恒定不变的特性。必须在域的定义处或者构造器中用表达式对final进行初始化。
package com.htxx.action.business;
class F{
}
public class BlankFinal {
final F f;
public BlankFinal() {
// TODO Auto-generated constructor stub
f=new F();
f=new F();//The final field f may already have been assigned
}
public static void main(String[] args) {
}
}
Final关键字
Final参数
java允许在参数列表中以声明的方式将参数指明为final.这意味着无法再方法中更改参数引用指向的对象
package com.htxx.action.business;
class F{
}
public class BlankFinal {
public BlankFinal() {
}
void Method1(final F f){
f=new F();//The final local variable f cannot be assigned.
//It must be blank and not using a compound assignment
}
void method2(final int i){
i++;
//The final local variable i cannot be assigned.
//It must be blank and not using a compound assignment
}
}
Final方法
final修饰的方法可以把方法锁住,防止继承类修改他的含义。
package com.htxx.action.business;
class F{
final void m1(){
}
}
public class BlankFinal extends F {
void m1(){//Cannot override the final method from F
System.out.println("ttt");
}
}
Final类
当某个类被定义为final的时候,标明该类不能被继承。
package com.htxx.action.business;
final class F{
private final void m1(){
System.out.println("rrr");
}
}
public class BlankFinal extends F {
//The type BlankFinal cannot subclass the final class F
void m1(){
System.out.println("ttt");
}
}