final的特點(diǎn)
????????final的中文意思是最終,既然是最終就是已經(jīng)結(jié)束了,無(wú)法再改變了。在Java里面final關(guān)鍵字同樣也有著類(lèi)似的功能。
????????final修飾的類(lèi)無(wú)法被繼承。例1
????????final修飾的方法無(wú)法被重寫(xiě)。例2
????????final修飾的局部變量,一旦賦值,不可再改變。例3
????????final修飾的成員變量必須初始化值。例4
例1:
? ??final class? A{}
? ?class? ? B????extends? ?A{}//error無(wú)法繼承
例2:
class????A{
? ? public????final????void????m1(){}
}class????Bextends????A{
? ? public????void????m1(){}//error無(wú)法重寫(xiě)
}
例3:
clas????sA{
? ? public????void????m1(){
? ? ? ? //聲明? ? ? ?
????????final int i;
? ? ? ? //第一次賦值? ? ? ? i = 100;
? ? ? ? //error不能重新賦值? ? ? ? i = 1200;
? ? }
}
例4:
class????A{
? ? //final修飾的成員變量必須手動(dòng)初始化.? ?
?????????final int i = 100;
? ? //error必須進(jìn)行初始化??
?????????final int k;
? ? //final修飾的成員變量一般和static聯(lián)用。? ?
?????////java規(guī)范中要求所有的常量"大寫(xiě)"? ? public static final double PI = 3.14;
}
final修飾引用類(lèi)型
final修飾的引用類(lèi)型,該引用不可再重新指向其他的java對(duì)象。但是fianl修飾的引用,該引用指向的對(duì)象的屬性值是可以修改的。
? ??基本類(lèi)型,是值不能被改變
? ??引用類(lèi)型,是地址值不能被改變,對(duì)象中的屬性可以改變
public class FinalTest01{
? ? publicstaticvoidmain(String[] args){
? ? ? ? final Customer c = new Customer("張三",20);
? ? ? ? //c是final的,無(wú)法重新賦值。? ? ? ?
?????????//c = new Customer("李四",21);
????????????//Error? ? ? ? c.name = "王五";
? ? ? ? c.age = 25;
? ? ? ? System.out.println(c.name);
? ? ? ? System.out.println(c.age);
? ? }
}class Customer{
? ? String name;
? ? int age;
? ? Customer(String name,int age){
? ? ? ? this.name = name;
? ? ? ? this.age = age;
? ? }
}