Java 建構函式與修飾符詳解:初始化物件與控制許可權

發表於2024-02-29

Java 建構函式

Java 建構函式 是一種特殊的類方法,用於在建立物件時初始化物件的屬性。它與類名相同,並且沒有返回值型別。

建構函式的作用:

  • 為物件的屬性設定初始值
  • 執行必要的初始化操作
  • 提供建立物件的多種方式

建構函式的型別:

  • 預設建構函式: 無引數的建構函式,如果使用者沒有明確定義建構函式,則 Java 編譯器會自動建立一個預設建構函式。
  • 帶引數的建構函式: 可以為建構函式新增引數,以便在建立物件時傳入初始值。

示例:

public class Main {
  int x;

  // 預設建構函式
  public Main() {
    x = 5;
  }

  // 帶引數的建構函式
  public Main(int y) {
    x = y;
  }

  public static void main(String[] args) {
    Main myObj1 = new Main(); // 呼叫預設建構函式
    System.out.println(myObj1.x); // 輸出 5

    Main myObj2 = new Main(10); // 呼叫帶引數的建構函式
    System.out.println(myObj2.x); // 輸出 10
  }
}

建構函式的注意事項:

  • 建構函式不能被重寫。
  • 建構函式不能被宣告為 abstract 或 final。
  • 建構函式可以丟擲異常。

一些額外的說明:

  • 可以使用建構函式來執行物件的初始化操作,例如:

    • 開啟資料庫連線
    • 載入配置檔案
    • 註冊事件監聽器
  • 可以使用多個建構函式來提供建立物件的多種方式,例如:

    • 使用預設值建立物件
    • 使用引數建立物件
    • 使用克隆建立物件

Java 修飾符

Java 修飾符 用於控制類、屬性、方法和建構函式的訪問許可權和行為。它們可以分為兩組:

  1. 訪問修飾符:
  • public: 意味著程式碼對所有類可訪問。
  • private: 意味著程式碼只能在宣告的類內部訪問。
  • default: 意味著程式碼只能在同一包中訪問。
  • protected: 意味著程式碼在同一包和子類中可訪問。
  1. 非訪問修飾符:
  • final: 意味著類不能被繼承,屬性和方法不能被重寫。
  • static: 意味著屬性和方法屬於類,而不屬於物件。
  • abstract: 意味著類不能用於建立物件,方法沒有主體,必須由子類提供。
  • transient: 意味著在序列化包含它們的物件時,屬性和方法將被跳過。
  • synchronized: 意味著方法一次只能由一個執行緒訪問。
  • volatile: 意味著屬性的值不會在本地執行緒快取,總是從“主記憶體”讀取。

示例:

訪問修飾符:

// public類可以被任何類訪問
public class Main {

  // private屬性只能在 Main 類內部訪問
  private int x = 10;

  // default方法只能在同一個包中訪問
  void myMethod() {
    System.out.println("This is a default method.");
  }

  // protected方法可以在同一個包和子類中訪問
  protected void myProtectedMethod() {
    System.out.println("This is a protected method.");
  }

  public static void main(String[] args) {
    Main myObj = new Main();
    System.out.println(myObj.x); // 錯誤,無法訪問私有屬性
    myObj.myMethod(); // 可以訪問 default 方法
    myObj.myProtectedMethod(); // 可以訪問 protected 方法
  }
}

非訪問修飾符:

public class Main {

  // final屬性不能被修改
  final int y = 20;

  // static方法可以在不建立物件的情況下訪問
  static void myStaticMethod() {
    System.out.println("This is a static method.");
  }

  // abstract方法沒有主體,必須由子類提供
  abstract void myAbstractMethod();

  public static void main(String[] args) {
    // y = 30; // 錯誤,無法修改 final 屬性
    myStaticMethod(); // 可以訪問 static 方法
    // myAbstractMethod(); // 錯誤,無法直接呼叫抽象方法
  }
}

// 子類繼承 Main 類並提供抽象方法的主體
class Child extends Main {

  @Override
  void myAbstractMethod() {
    System.out.println("This is the implementation of myAbstractMethod.");
  }
}

一些額外的說明:

  • 可以使用多個修飾符來修飾類、屬性、方法和建構函式。例如,public final 表示類是公開的並且不能被繼承。
  • 修飾符是 Java 語言的重要組成部分,它們可以幫助您控制程式碼的訪問許可權和行為。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎 點贊、收藏、關注

相關文章