Java中final和static關鍵字總結
1、final:
final關鍵字可用於類、方法、變數前。
final修飾的類不可被繼承,例如java.lang.Math就是一個 final類,不可被繼承。
final修飾變數,在顯示初始化後不可改變變數值,用於常量定義。如果final變數是引用變數,則不可以改變它的引用物件,但可以改變物件的資料(屬性)。
final修飾的方法不可被重寫。
錯誤案例)
package com.sp; public final class Fish { final String name = "魚"; public void method(){ name = "魚"; #此時變數屬性不可再改變 } }
2、static:
2.1)static關鍵字用來修飾變數、方法、遊離塊和內部類,稱這些變數、方法和內部類為靜態變數、靜態方法和靜態內部類。
2.1.1)案例
package com.sp; import java.util.Calendar; public class Person { String name; static int count ;//人口總數 靜態屬性 public Person() { count++; } public static void main(String[] args) { Person p1 = new Person(); System.out.println("人口總數:"+p1.count); Person p2 = new Person(); System.out.println("人口總數:"+p2.count); Person p3 = new Person(); System.out.println("人口總數:"+p3.count); } }
2.2)static關鍵字宣告一個屬性或方法是和類相關的,而不是和類的某個特定的例項相關,因此,這類屬性或方法也稱為“類屬性”或“類方法”。
2.3)如果訪問控制權限允許,可不必建立該類物件而直接使用類名加“呼叫。
2.4)static 不可用於修飾構造器
2.5)static修飾的屬性和方法,物件之間是共享的。
2.6)static修飾的屬性和方法,可以直接用類名呼叫。
2.7)static遊離塊。
2.7.1)static除了用於修飾變數和方法外,還可以用於修飾類中的遊離塊(自由塊)。
2.7.2)所謂類的“遊離塊”,就是在類中用“{}”包含起來的不屬於任何方法或構造器的程式碼段。
2.7.3)使用static來修飾的遊離塊只在類載入的時候執行一次,通常用於初始化靜態變數。
2.7.3.1案例1)
package com.sp; public class Person { String name; static int count ;//人口總數 靜態屬性 public Person() { count++; System.out.println("執行了構造器"); } static { System.out.println("執行了靜態遊離塊"); } { System.out.println("執行了遊離塊"); } public static void main(String[] args) { Person p1 = new Person(); } } //執行了靜態遊離塊,執行了遊離塊,執行了構造器。
2.7.3.2 案例2)
父類:
package com.sp; public class Anmail { public Anmail(){ System.out.println("執行了父類構造器"); } static { System.out.println("執行了父類靜態遊離塊"); } { System.out.println("執行了父類遊離塊"); } }
Person類繼承:
package com.sp; import java.util.Calendar; public class Person extends Anmail { String name; static int count ;//人口總數 靜態屬性 public Person() { count++; System.out.println("執行了子類構造器"); } static { System.out.println("執行了子類靜態遊離塊"); } { System.out.println("執行了子類遊離塊"); } public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); } } //執行了父類靜態遊離塊 //執行了子類靜態遊離塊 //執行了父類遊離塊 //執行了父類構造器 //執行了子類遊離塊 //執行了子類構造器
寫在最後:歡迎留言討論,加關注,持續更新!