应用一:用final修饰的变量(包括成员变量和局部变量)将变成常量,且只能、必须在final修饰的地方赋值。
例如:
public calss Penguin{
Final String name=”南极”; //居住地
public void setHome(String name){
this.name=name; //错误,home不可以再次赋值。
}
}
在”this.name=name;”这行会出现红叉,提示错误信息:The final field Penguin.home cannot be assigned,即home不可以再次赋值。
应用二:用final修饰的方法,不能被子类重写。
例如:
public class Penguin{
public final void print(){}
}
public SubPenguin extends Penguin{
public void print ( ) { } //此行出现错误
}
public void print ( ) { } 报错,print()方法不能被子类重写。
应用三:用final修饰的类,不能再被继承。
public final class Penguin{ }
public class SubPenguin extends Penguin{}//此行出现错误
常见错误:
Calss Dog{
String name;
public Dog(String name){
this.name=name;
}
}
class Test{
public static void main(String[] args){
final Dog dog=new Dog(“小一”);
dog.name=”小二”;
dog=new Dog(“小三”);
}
}
可能出错的的代码:(正确代码)“dog.name=”小二”;“和(错误代码)“dog=new Dog(“小三”);”。
分析:使用final修饰引用型变量,变量不可以再指向另外的对象,所以“dog=new Dog(“亚亚”)”是错误的。但是所指对象的内容却是可以改变的,所以“dog.name=”小二”是正确的。
结论:
使用final修饰引用型变量时,变量的值是固定不变的,而变量所指向的对象的属性值是可以改变的。