前幾章涵蓋基本資料類型、陣列、運算子、流程控制。本章進入物件導向程式設計核心:基本觀念、類別、物件、套件、介面,最後給出完整 Java 檔案格式。
draw() 可接受字串、矩形、圓形等參數加速() 方法提升性能。覆寫隱藏父類實作,強調子類別特殊性類別為 Java 程式基本元素,封裝一類物件狀態與方法,為原型。結構:
classDeclaration {
classBody
}
最簡形式:class className { ... }
可包含:父類別、實作介面、修飾詞 public, abstract, final(後續章節詳述)。
定義所有成員變數與方法。慣例變數在方法前定義:
class className {
memberVariableDeclarations;
methodDeclarations;
}
class Point {
int x, y;
void init(int ix, int iy) { x = ix; y = iy; }
}
成員可設定存取權限:private, protected, public, friendly(包內預設,§6.6 詳述)。
成員分實例成員與類別成員(static)(§6.7、§6.8 詳述)。
最簡宣告:type variableName; 類型可為任意 Java 資料類型。同類別內變數名稱唯一,但可與方法同名(如 int x; 與 int x())。
成員變數作用域為整個類別,區別於方法內區域變數。可用修飾詞限定:
final:常數,如 final int CONSTANT = 50; 程式中不可修改,慣用大寫命名static:類別變數(§6.7)特殊方法,名稱與類別同名、無回傳型別、用於初始化新物件。每個類別皆有建構子,可多載。若未實作,JVM 提供無參數預設建構子。
class Point {
int x, y;
Point() { x = 0; y = 0; }
Point(int x, int y) { this.x = x; this.y = y; }
}
優勢:new 配置記憶體時自動呼叫建構子,避免建立物件後每次手動呼叫初始化方法。建構子只能由 new 呼叫,同樣受存取權限限制。
垃圾回收前 JVM 自動呼叫,釋放系統資源(開啟檔案、socket 等)。宣告:
protected void finalize() throws Throwable
覆寫時慣用模式:
protected void finalize() throws Throwable {
// 清理本類別資源
super.finalize(); // 呼叫父類 finalize()
}
super 與 java.lang.Object 於 §6.4 講述。
類別實例化產生多個物件,透過訊息傳遞(呼叫方法改變狀態或產生行為)互動完成複雜任務。
語法:type objectName = new type([paramList]);
type objectName; 宣告,不分配記憶體new 分配記憶體、呼叫建構子、回傳物件參考(記憶體位址引用)Point p1 = new Point(); // 呼叫無參數建構子
Point p2 = new Point(5, 10); // 呼叫帶參數建構子
p1, p2 佔用不同記憶體,值獨立,操作互不影響。
物件參考指向中間資料結構(含型別資訊與堆疊位址),實際記憶體位址不可操作 → 安全性保障。
objectRef.variable 例:p.x = 10; 或 tx = new Point().x;objectRef.methodName([params]) 例:p.move(30,20); 或 new Point().move(30,20);p.newPoint().print())、存取回傳物件成員(px = p.newPoint().x)class Point {
int x, y;
String name = "a point";
Point() { x=0; y=0; }
Point(int x, int y, String name) { this.x=x; this.y=y; this.name=name; }
int getX() { return x; }
int getY() { return y; }
void move(int newX, int newY) { x=newX; y=newY; }
Point newPoint(String name) { return new Point(-x, -y, name); }
boolean equal(int x, int y) { return this.x==x && this.y==y; }
void print() { System.out.println(name + " : x = " + x + " y = " + y); }
}
public class UsingObject {
public static void main(String args[]) {
Point p = new Point();
p.print();
p.move(50,50);
System.out.println("x = " + p.x + " y = " + p.y);
System.out.println("x = " + p.getX() + " y = " + p.getY());
if(p.equal(50,50)) System.out.println("I like this point!!!!");
p.newPoint("a new point").print();
new Point(10,15,"another new point").print();
}
}
輸出展示物件建立、移動、直接/間接存取座標、比較、建立對稱點與新物件列印。