Java 作為純物件導向語言,支援封裝、繼承、多型、抽象等核心特性。本文深入解析類別與物件的關係、結構組成、建構方法、實例化流程與原始碼檔案規範,並附完整程式碼範例。
現實世界中,「男孩/女孩」是類別,具體的每個人則是該類別的物件實例。
public class Dog {
// 成員變數(屬性)
String breed;
int age;
String color;
// 方法(行為)
void barking() { }
void hungry() { }
void sleeping() { }
}
| 類型 | 宣告位置 | 生命週期 | 存取範圍 |
|---|---|---|---|
| 區域變數 | 方法/建構子/程式區塊內 | 方法結束即銷毀 | 僅限該方法內部 |
| 成員變數(實例變數) | 類別中、方法外 | 物件建立時實例化,物件銷毀時消失 | 類別所有方法、建構子、特定區塊 |
| 類別變數(靜態變數) | 類別中、方法外,加 static 修飾 | 類別載入時建立,程式結束釋放 | 全類別共享,可透過類別名直接存取 |
public class Puppy {
// 無參數建構子
public Puppy() { }
// 含參數建構子
public Puppy(String name) {
System.out.println("小狗的名字是:" + name);
}
}
Puppy myPuppy; — 宣告參考變數類型與名稱new Puppy("tommy") — 在堆疊配置記憶體完整寫法:Puppy myPuppy = new Puppy("tommy");
// 實例化物件
ObjectReference = new Constructor();
// 存取屬性
ObjectReference.variableName;
// 呼叫方法
ObjectReference.MethodName();
public class Puppy {
int puppyAge; // 實例變數
public Puppy(String name) {
System.out.println("小狗的名字是:" + name);
}
// 設定年齡
public void setAge(int age) {
puppyAge = age;
}
// 取得年齡
public int getAge() {
System.out.println("小狗的年齡為:" + puppyAge);
return puppyAge;
}
public static void main(String[] args) {
// 建立物件
Puppy myPuppy = new Puppy("tommy");
// 透過方法設定/取得屬性
myPuppy.setAge(2);
myPuppy.getAge();
// 直接存取 public 實例變數
System.out.println("變數值:" + myPuppy.puppyAge);
}
}
輸出結果:
小狗的名字是:tommy 小狗的年齡為:2 變數值:2
package 陳述句必須在檔案第一行import 陳述句置於 package 與類別定義之間;無 package 時置於檔案最前端套件用於組織管理大量類別。import java.io.*; 讓編譯器載入該套件下所有類別,提供合理路徑定位原始碼或編譯後的 class 檔。
Employee.java — 定義員工實體類別
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
// 建構子
public Employee(String name) {
this.name = name;
}
// 存取器方法
public void empAge(int empAge) { age = empAge; }
public void empDesignation(String empDesig) { designation = empDesig; }
public void empSalary(double empSalary) { salary = empSalary; }
// 列印資訊
public void printEmployee() {
System.out.println("名字:" + name);
System.out.println("年齡:" + age);
System.out.println("職位:" + designation);
System.out.println("薪水:" + salary);
}
}
EmployeeTest.java — 主程式建立物件並測試
import java.io.*;
public class EmployeeTest {
public static void main(String[] args) {
// 建立兩個員工物件
Employee empOne = new Employee("RUNOOB1");
Employee empTwo = new Employee("RUNOOB2");
// 設定屬性
empOne.empAge(26);
empOne.empDesignation("高級程式設計師");
empOne.empSalary(1000);
empTwo.empAge(21);
empTwo.empDesignation("菜鳥程式設計師");
empTwo.empSalary(500);
// 列印結果
empOne.printEmployee();
empTwo.printEmployee();
}
}
編譯執行後輸出兩位員工完整資訊,展示物件獨立擁有各自狀態的特性。
除了一般類別,Java 還提供內部類別、匿名類別、抽象類別、final 類別等進階型態,將在存取控制與進階特性章節詳細介紹。