首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 類與物件核心概念詳解:從定義到構造方法實戰

     編輯:Java 相關知識

在 Java 程式設計中,類與物件是物件導向程式設計(OOP)的基石。本文將系統性地講解類的定義、物件的建立與使用、成員變數與區域變數的區別、構造方法的作用與重載,以及靜態成員與初始化塊的運作機制,並附上完整程式碼範例幫助你深入理解。

一、類與物件的基本概念

類是物件的抽象藍圖,定義了一組擁有相同屬性(成員變數)與行為(方法)的物件集合。物件則是類的具體實例,佔據實際記憶體空間。

1. 類的定義語法

訪問修飾符 class 類名 {
    資料類型 屬性名;
    訪問修飾符 回傳值類型 方法名() {}
}

2. 建立與使用物件

// 建立物件
類名 物件名 = new 類名();

// 存取屬性與呼叫方法
物件名.屬性名;
物件名.方法名();

同一個類可以建立多個物件,每個物件擁有獨立的成員變數副本,互不干擾。

二、成員變數與區域變數的關鍵差異

特性成員變數區域變數
定義位置類中,方法外部方法內部或參數列表
作用範圍整個類(或經由物件存取)僅限所在方法/區塊
預設初始值有(數值型為 0,布林為 false,引用型為 null)無,必須顯式初始化才能使用
記憶體位置堆記憶體(隨物件)棧記憶體
同名優先權較低較高(就近原則)

三、構造方法:物件初始化的關鍵

構造方法是特殊的方法,用於在 new 物件時完成初始化工作。其特徵為:

  • 方法名與類名相同
  • 無回傳值類型(連 void 也不寫)
  • 可重載:同名但參數列表不同

預設構造方法規則

  • 若類中未定義任何構造方法,編譯器會自動提供一個無參構造方法
  • 若類中已定義任意構造方法(無論有參無參),編譯器將不再自動提供無參構造方法

程式碼範例:Telephone 類與構造方法重載

package com.test;
public class Telephone {
    double screen;
    double cpu;
    double mem;

    // 無參構造方法
    public Telephone() {
        System.out.println("無參數的構造方法");
    }

    // 有參構造方法:實現屬性初始化與合法性檢查
    public Telephone(double newScreen, double newCpu, double newMem) {
        screen = newScreen;
        cpu = newCpu;
        mem = newMem;
        System.out.println("有參數的構造方法");
    }

    public void sendMessage() {
        System.out.println("screen:" + screen + ";cpu:" + cpu + ";mem:" + mem);
    }
}
package com.test;
public class Demo {
    public static void main(String[] args) {
        // 使用無參構造建立物件,再逐一賦值
        Telephone phone = new Telephone();
        phone.screen = 5.4;
        phone.cpu = 1.2;
        phone.mem = 6.0;
        phone.sendMessage();

        // 使用有參構造直接初始化
        Telephone phone1 = new Telephone(5.0, 1.5, 4.0);
        phone1.sendMessage();
    }
}

執行結果:

無參數的構造方法
screen:5.4;cpu:1.2;mem:6.0
有參數的構造方法
screen:5.0;cpu:1.5;mem:4.0

四、靜態成員:屬於類層級的共享資源

使用 static 修飾的成員稱為靜態成員(類成員),特點如下:

  • 屬於整個類,被所有物件共享
  • 類載入時分配記憶體,類卸載時釋放
  • 可透過 類名.靜態成員 直接存取(推薦),也可透過物件存取

靜態方法的限制

  • 靜態方法中可直接呼叫靜態成員/方法
  • 靜態方法中不能直接呼叫非靜態成員/方法(需先建立物件)
  • 非靜態方法可直接存取靜態與非靜態成員

程式碼範例

package com.test;
public class Demo8 {
    public static String classroom = "Java班";  // 靜態變數
    public String schoolName = "希望小學";      // 實例變數

    public static void getName() {
        System.out.println("=======getName=======");
        System.out.println(classroom);           // 直接存取靜態變數
        Demo8 demo = new Demo8();
        System.out.println(demo.schoolName);     // 需透過物件存取實例變數
    }

    public void func() {
        System.out.println("=======func=======");
        System.out.println(classroom);           // 非靜態方法可直接存取靜態變數
        System.out.println(schoolName);          // 直接存取實例變數
    }

    public static void main(String[] args) {
        System.out.println("=======main=======");
        System.out.println(Demo8.classroom);
        System.out.println(classroom);
        Demo8.getName();
        getName();
        Demo8 demo = new Demo8();
        demo.func();
    }
}

五、初始化塊:靈活的賦值機制

類中可包含多個初始化塊,建立物件時依序執行。若用 static 修飾則為靜態初始化塊。

執行順序與規則

  1. 靜態初始化塊:類載入時執行一次,僅能初始化靜態變數
  2. 普通初始化塊:每次建立物件時執行,先於構造方法
  3. 構造方法:最後執行

程式碼範例

package com.test;
public class Demo9 {
    int age;
    String name;
    static String sex;

    public Demo9() {
        age = 12;
        System.out.println("通過構造函數初始化age");
    }

    {  // 普通初始化塊
        name = "java";
        System.out.println("通過初始化塊初始化name");
    }

    static {  // 靜態初始化塊
        sex = "女";
        System.out.println("通過靜態初始化塊初始化sex");
    }

    public static void main(String[] args) {
        Demo9 demo = new Demo9();
        System.out.println("年齡" + demo.age + " 姓名" + demo.name + " 性別" + sex);
        Demo9 demo1 = new Demo9();  // 第二次建立物件,靜態初始化塊不再執行
    }
}

執行結果:

通過靜態初始化塊初始化sex
通過初始化塊初始化name
通過構造函數初始化age
年齡12 姓名java 性別女
通過初始化塊初始化name
通過構造函數初始化age

六、總結

掌握類與物件的核心機制——成員變數作用域、構造方法重載、靜態成員共享特性、初始化塊執行順序——是寫出健壯 Java 程式的基礎。實際開發中,善用構造方法保證物件初始狀態合法,合理區分靜態與實例成員,能有效避免記憶體洩漏與邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved