面向過程強調功能行為(動詞),如 HideWindow(window),是「謂語-賓語」關係。
面向對象將功能封裝進對象,強調具備功能的對象(名詞),如 window.hide(),是「主語-謂語」關係。面向對象基於面向過程,更符合人類自然思維。
類是抽象概念定義(圖紙),對象是具體實例(汽車)。同類事物共性定義在類中,每個對象擁有獨立屬性值。
| 維度 | 成員變量 | 局部變量 |
|---|---|---|
| 定義位置 | 類中,方法外 | 方法內、代碼塊內 |
| 內存位置 | 堆內存(隨對象) | 棧內存 |
| 生命周期 | 隨對象創建/銷毀 | 隨作用域結束釋放 |
| 默認值 | 有 | 無(必須初始化) |
同名時局部變量屏蔽成員變量,可用 this 區分。
將屬性私有化,提供公共 set/get 方法。好處:隔離變化、便於使用、提高復用與安全性。
代表調用該方法的對象引用。用於區分同名成員、構造器互調、傳遞當前對象。
this/super,main 方法為靜態。extends 關鍵字,子類繼承父類非私有成員。代表父類內存空間標識。用於:訪問父類被隱藏成員、子類構造器中調用父類構造器(super() 必須首行)。
abstract 修飾類/方法;抽象方法無方法體。public static final、方法 public abstract(JDK8+ 可有 default/static 方法)。| 維度 | 抽象類 | 接口 |
|---|---|---|
| 關系 | 繼承 | 實現 |
| 關系類型 | is-a | like-a |
| 方法 | 可有非抽象方法 | 全抽象(JDK8前) |
| 繼承限制 | 單繼承 | 多實現 |
父類/接口引用指向子類對象:Animal a = new Cat();
子類對象可作父類用(向上),失去子類特有成員;父類引用可強轉回子類(向下),需 instanceof 判斷。
private/static 修飾;static 內部類只能訪問外部靜態成員。Throwable → Error(嚴重錯誤,不處理) / Exception(可處理)
getMessage()、toString()、printStackTrace()(含位置)、printStackTrace(PrintStream)(寫日誌)。throws:方法聲明拋出異常類名。throw:方法內拋出異常對象。try 監測代碼;catch 處理;finally 必執行(關資源)。System.exit(0) 可跳過 finally。繼承 Exception,構造器調用 super(message),用 throw 拋出。
package 聲明在首行,全類名 = 包名.類名。public > protected > default > private(跨包子類可訪 protected)。jar -cvf 創建;-tvf 查看;-xvf 解壓;-cvfm 自定義清單。Main-Class 可雙擊運行 GUI 程序。