| 作用域 | 當前類 | 同一 package | 子類 | 其他 package |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| friendly (預設) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |
不寫修飾子預設為 friendly。
int 為原始型別,Integer 為封裝類別。Java 為每個原始型別提供封裝類(boolean→Boolean, char→Character 等)。兩者行為、語義、儲存結構、預設值全異:物件參考預設 null,原始型別視型別而定。
String 內容不可變;StringBuffer 可修改。動態構建字串請用 StringBuffer。
執行期異常(RuntimeException)為 JVM 通常操作可能遇到的常見錯誤,編譯器不強制宣告拋出;受檢異常必須宣告。
實例化 → init() → 請求到達 service() → 派發 doGet/doPost → 銷毀 destroy()。
差異:Servlet 駐留伺服器進程,多執行緒服務多請求,實例通常不銷毀;CGI 每請求產生新進程,服務完銷毀,效率較低。
基於 JNDI、RMI、JTA。
SessionBean:完成伺服器端業務操作(非持久)。
EntityBean:代表持久資料(持久)。
Stateful vs Stateless SessionBean:前者維護用戶狀態,佔較多記憶體;後者無狀態,實例可共用,記憶體效率高。
Collection 為集合介面(父介面),子介面含 Set、List。
Collections 為工具類,提供排序、搜尋、執行緒安全化等靜態方法。
& 位元邏輯與運算;&& 邏輯與(短路運算)。
Override:父子類多型,同名同參數;Overload:同類多型,參數個數或型別不同。Overload 可改變回傳型別。
Error:嚴重問題(如記憶體溢位),程式難以處理。
Exception:設計/實作問題,正常執行不應發生。
共享資料必須同步存取。長耗時操作不想阻塞主流程用非同步,通常效率更高。
Abstract Class:部分實作、可有建構子/非抽象方法、單繼承。
Interface:全抽象方法、僅可定義 static final 常數、多實作、支援動態繫結。
Stack:線性集合,後進先出,儲存基本型別與物件參考。
Heap:Stack 組成元素,動態分配物件實體。
Forward:伺服端內部轉發,瀏覽器網址不變。
Redirect:伺服端回傳狀態碼,瀏覽器重新請求新網址,參數可保留。
JavaBean:可重用元件,本地進程內,需無參建構子、實作 Serializable。
EJB:分散式元件(相當 DCOM),基於 RMI,跨進程/機器存取,需部署於 WebSphere/WebLogic 等容器,客戶透過容器代理存取。
Static Nested Class:無需外部類實例即可實例化。
Inner Class:需外部類實例化後才能實例化。
動態 <jsp:include>:檢查檔案變化、支援參數、適合動態頁。
靜態 <%@ include %>:不檢查變化、適合靜態頁。
開發/測試階段開啟,檢查關鍵布林表達式;發布關閉以提升效能。
自動監測物件超出作用域回收記憶體,防止洩漏,無顯式釋放操作。
short s1=1; s1=s1+1; 編譯錯誤(結果為 int 需強轉)。
short s1=1; s1+=1; 正確(隱含強轉)。
round(11.5)=12,round(-11.5)=-11。參數加 0.5 後取 floor。
String s = new String("xyz") 建立兩個物件(常數池 1 個 + 堆 1 個)。
四執行緒(兩增兩減)配合 synchronized 方法保證執行緒安全,完整程式碼見原文。
start() 使執行緒進入可執行狀態由 JVM 排程;run() 只是普通方法呼叫。
Stateless 由容器決定實例複用;Stateful 客戶首次調用即建立專屬實例。
EntityBean 生命週期長,隨資料庫資料存在,容器崩潰仍存活。
事務管理:OMG OTS、Sun JTS/JTA、X/Open XA。
BEA WebLogic、IBM WebSphere、Oracle9iAS、JBoss、Tomcat。
NullPointerException, IndexOutOfBoundsException, ClassCastException, IllegalArgumentException 等 40+ 種。
介面可繼承介面;抽象類可實作介面;抽象類可繼承實體類(需明確建構子)。
List、Set 繼承 Collection;Map 不繼承。
啟動建立最小連線數;需求時取閒置連線標記忙碌;不足時按參數擴建;歸還標記閒置供下次複用。
不可同時為 static、native、synchronized。
陣列有 length 屬性無方法;String 有 length() 方法。
用 iterator() 遍歷配合 equals() 判斷內容相等;== 比較參考位址。
Finally 區塊在 return 前執行。
2 << 3(左移 3 位 = 乘 2³)。
x.equals(y)==true 必須有相同 hashCode。
方法可修改物件內容,但無法改變呼叫端的參考變數指向。
一個物件同一時間僅允許一執行緒進入任一 synchronized 方法。
餓漢式(類載入即建立)與懶漢式(雙重檢查鎖定/同步方法首次建立),前者較安全。
Java 介面無實作碼、全 public、支援多實作、彈性高於單繼承。
違反語義規則 → JVM 拋出異常(內建如 IndexOutOfBoundsException、NullPointerException)或程式員自訂異常(throw),所有異常繼承 Throwable。
優點:解決記憶體管理難題、防洩漏。物件無作用域,只有參考有。
演算法:分代複製、標記清除、增量收集。GC 為低優先級執行緒,不可即時呼叫。
wait()、sleep()、notify()、notifyAll()。
List 實作:ArrayList、Vector(適合索引存取)。
Map 實作:鍵值對儲存,每鍵映射一值。
ClassLoader 及其子類負責執行期尋找載入 class 檔案。
可行。Java 採 Unicode,char 佔 16 位元(2 bytes),足以容納漢字。
繼承 Thread、實作 Runnable。
同步實作:synchronized、wait/notify。
request、response、out、pageContext、session、application、config、page、exception。
執行中、就緒、阻塞、結束。
isErrorPage、isELIgnored、page、include、taglib 等。
Form method="get" 呼叫 doGet;method="post" 呼叫 doPost。