final關鍵字在java中十分重要,是一個常用的修飾符。
final關鍵字可以用于修飾類、字段、方法,當用于類上時,此類就成為了不可繼承的最終類,用于方法時就成了不能覆寫的最終方法,用于字段時,就成了最終的變量,只能在初始化的時候賦值,而不能在之后重新賦值。
final修飾的類不可繼承,無法有子類。Java中封裝的思想是將類的屬性和方法的實現細節隱藏起來,但是繼承卻破壞了封裝,使子類可以繼承父類的方法和字段。為了解決這個問題,所以出現了final關鍵字,final關鍵字修飾的類,無法有子類,也就沒有了破壞封裝的問題。一般使用于工具類和基本數據類型上,比如String類和Integer等表示數據的類即不可繼承。在String類的源碼上可以看到:
public final class String以及Integer類的聲明:
public final class Integer extends Number implements Comparable<Integer>可以看到以上兩個類都是final類,因此無法繼承。final類一般有幾個特點,如: 1、某個類不是專門為繼承而設計的,比如String等表示數據的類。 2、有時候出于安全考慮,類的屬性和實現細節不允許類改動的,使用final可以防止通過繼承的方式覆寫父類的方法,從而改變源代碼的實現。 3、確定現在以及以后此類都不會被繼承,比如工具類。
final class Person {}class Student extends Person {//錯誤用法,無法繼承final類}final修飾的方法不能覆寫,這也是針對繼承來說的,因為沒有繼承就不會存在覆寫的概念。當有一些方法是父類已經提供好了的,不允許子類改寫的,就可以使用final關鍵字修飾,子類無法覆寫此方法,只能使用父類提供的,從而防止子類修改這個方法的實現。
class Person { public final String name = "無名氏"; public final void sayHello(){ System.out.final修飾的變量final修飾的變量只能在聲明的時候賦初值,之后就不可以再次賦值。一般會加上static修飾符使用,讓外界可以用類名直接調用這個變量,無需創建實體。
public class StaticDemo { public static void main(String[] args) { Person p = new Person(); p.name="賦值失敗,無法給最終變量賦值"; }}class Person { public final String name = "無名氏";}final一般會和static一起使用,static是靜態修飾符,可以將一個方法或者變量提升為整個類的成員,而一般不能改變的方法或變量都是高度集中的,因此需要static將這個方法或者變量提升為類的成員。例如數組排序方法,可以使用static關鍵字將其提升為類成員,其他地方即可使用類名直接調用,而無需專門創建一個工具類的實體。
public class StaticDemo { public static void main(String[] args) { System.out.println(Person.name);//可以用類名調用 }}class Person { public final static String name = "無名氏";}新聞熱點
疑難解答