一、final用法說明
final修飾變量:
對於final修飾的變量,表示該變量被賦予的引用是不可變的,可以理解爲該變量只能指向一個地址,不能指向其它地址。
例如: final String tempS = "zhangs";
//這表示tempS只能指向zhangs,因爲String是一個基本類型,其實tempS就相當於一個常量。
final Date tempH = new Date() ;
//這表示tempH只能指向new出來的Date對象實例,不能指向其它處,此時tempH所指向的對象的值是可以通過調用對象的方法修改的,如setTime()方法。
final修飾參數:
對於final修飾的參數,表示對該參數只能引用,但不可以修改參數的值
import java.util.* ;
public class Test15
{
public static void main(String[] args)
{
int testInt1 = 100 ;
int testInt2 = TempInt(testInt1);
System.out.println(testInt2);
Date testDate1 = new Date();
System.out.println(testDate1);
Date testDate2 = TempDate(testDate1);
System.out.println(testDate2);
Date testDate3 = TempDate1(testDate1);
System.out.println(testDate3);
System.out.println(testDate1);
}
static int TempInt(final int i)
{
int s1 = i;
//i++ ; 此處試圖修改i的值,由於i是final類型的,編譯的時候會報錯
return s1 ;
};
static Date TempDate (final Date tempH)
{
Date tempH1 = tempH ;
return tempH1;
};
static Date TempDate1 (final Date tempH)
{
Date tempH1 = tempH ;
tempH.setTime(100000);
return tempH ;
};
}
final修飾方法:
對於final修飾的方法表示該方法不可以被子類重寫,但可以被子類繼承。
class ParentClass
{
public final void TestFinal()
{
System.out.println("父類final方法");
}
}
public class ChildClass extends ParentClass
{
//該處重寫父類的TestFinal()方法,但由於父類的方法是final的,此處重寫編譯時會報錯。
// public void TestFinal() {
// System.out.println("子類--重寫final方法");
// }
public static void main(String[] args)
{
ChildClass sc = new ChildClass();
sc.TestFinal();
}
}
final修飾類:
對於final修飾的類表示該類不能再被其它類繼承,例如String類就是final的,不能有其它類再繼承String。