擔任 SCJP 培訓一段時間,學員包含大學生與在職開發人員。雖對 Java 有些了解,但普遍缺乏整體認識,常問:Java 怎麼學?能做什麼?什麼是 Applet/Servlet/JSP/EJB?WebSphere/WebLogic 又是什麼?這是因為聽說概念太多、實際了解太少。
學通 Java 需循序漸進:先學標準技術 (J2SE) → 簡單 Web 應用 → 分散式應用 → 移動技術應用。
編譯後的 Java 程式為位元組碼,非傳統二進制碼,需 JVM 解釋執行。主流作業系統皆實作 JVM,故實現跨平台。關鍵在於理解 JVM 與位元組碼概念。
Java 完整支援 OOP。Class 為基本單元,程式由多個 Class 組成並有繼承關係。支援單繼承,繼承產生多型:父類別引用可指向子類別物件,形成組件物件模型基礎(透過介面存取實作)。
以位元組流 (InputStream/OutputStream) 與字元流 (Reader/Writer) 分別讀寫二進制與字元資料。File 類別同時提供檔案與目錄操作。例:列出 C 槽根目錄所有檔案:
File f = new File("c://");
String[] m_dir = f.list();
for (int i=0; i<m_dir.length; i++) System.out.println(m_dir[i]);
AWT/Swing 套件進行 GUI 設計。例:建立 200x200 視窗:
Frame f = new Frame("Welcome");
f.setSize(200,200);
f.setVisible(true);
預設關閉按鈕無效,需加入 WindowListener(通常用 WindowAdapter 匿名內部類實作)處理 windowClosing 事件呼叫 System.exit(0)。
執行緒實現並行處理提升效率。建立方式:實作 Runnable 或繼承 Thread 覆寫 run()。前者保留繼承一個類別的可能。
永遠用 start() 啟動執行緒,直接呼叫 run() 不會啟動新執行緒。
用 synchronized 保護共享資料,確保同一時間僅一執行緒存取。
用 Object 的 wait()/notify() 實現執行緒間交互,注意必須在同一物件上呼叫。notify() 喚醒一個,notifyAll() 喚醒所有。