SlideShare a Scribd company logo
1 of 70
Download to read offline
1
反射與類別載入器
學習目標
• 取得.class檔案資訊
• 動態生成物件與操作方法
• 認識模組與反射的權限設定
• 瞭解JDK9類別載入器階層
• 使用ClassLoader實例
2
運用反射
• JDK9支援模組化
• 開發者在採取模組設計時,如何在不破壞模
組封裝下又能運用反射機制的彈性,就成了
認識反射時必須知道的一大課題
3
Class與.class檔案
• Java真正需要某個類別時才會載入對應
的.class檔案
• java.lang.Class的實例代表Java應用程
式運行時載入的.class檔案
• Class類別沒有公開(public)建構式,
實例是由JVM自動產生
4
Class與.class檔案
• 可以透過Object的getClass()方法,或
者是透過.class常量(Class literal)取得每個
物件對應的Class物件
• 如果是基本型態,也可以使用對應的包裹類
別加上.TYPE取得Class物件
– 如Integer.TYPE可取得代表int的Class物件
– 如果要取得代表Integer.class檔案的Class,則必
須使用Integer.class
5
Class與.class檔案
• 可以操作Class物件的公開方法取得類別基
本資訊
6
Class與.class檔案
• 載入.class檔案的時機
– 使用指定類別生成物件時
– 使用 Class.forName()
– 使用java.lang.ClassLoader實例的
loadClass()
• 使用類別宣告參考名稱並不會載入.class檔案
7
Class與.class檔案
8
Class與.class檔案
• 編譯時期若使用到相關類別,編譯器會檢查
對應的.class檔案中記載之資訊,以確定是否
可完成編譯
• 執行時期使用某類別時,會先檢查是否有對
應的 Class物件,如果沒有,會載入對應
的.class檔案並生成對應的Class實例
9
Class與.class檔案
• 預設JVM只會用一個Class實例來代表一
個.class檔案(確切說法是,經由同一類別載
入器載入的.class檔案,只會有一個對應的
Class實例)
• 每個類別的實例都會知道自己由哪個Class實
例生成。預設使用getClass()或.class取得
的Class實例會是同一個物件
10
使用Class.forName()
• 可以使用Class.forName()方法實現動態
載入類別,可用字串指定類別名稱來獲得類
別相關資訊
11
使用Class.forName()
• Class.forName()另一版本可以讓指定類
別名稱、載入類別時是否執行靜態區塊與類
別載入器:
• 如果使用第一個版本的Class.forName()
方法,等同於:
12
使用Class.forName()
13
從Class獲得資訊
• 取得Class物件後,就可以取得與.class檔案
中記載的的資訊,像是套件、建構式、方法
成員、資料成員等訊息
– java.lang.Package
– java.lang.reflect.Constructor
– java.lang.reflect.Method
– java.lang.reflect.Field
– …
14
15
16
17
18
從Class建立物件
• 取得Class物件之後
• 呼叫Class的getConstructor()或
getDeclaredConstructor()方法
• 取得代表建構式的Constructor物件,利
用其newInstance()方法建立類別實例
19
從Class建立物件
• 你想採用影片程式庫來播放動畫,然而負責
實作影片程式庫的部門遲遲還沒動工,怎麼
辦呢?
20
從Class建立物件
• 可以在啟動程式時,透過系統屬性
cc.openhome.PlayerImpl指定
21
從Class建立物件
• 執行MediaPlayer若指定了-
Dcc.openhome.PlayerImpl=cc.openhome.Conso
lePlayer
22
從Class建立物件
• 若類別定義有多個建構式,也可以指定使用
哪個建構式生成物件
• 假設因為某個原因,必須動態載入
java.util.List實作類別
23
從Class建立物件
• 陣列的Class實例是由JVM生成,你並不知
道陣列的建構式為何
• 若要動態生成陣列,必須使用
java.lang.reflect.Array的
newInstance()方法
24
從Class建立物件
• 可以使用Array.set()方法指定索引設值,
或是使用Array.get()方法指定索引取值
• 比較偷懶的方式,直接當作Object[](或
已知的陣列型態)使用
25
從Class建立物件
• 為何要使用Array.newInstance()建立陣
列實例?
• 回顧一下9.1.7中實作過的ArrayList,如果
現在為其設計一個toArray()方法:
26
從Class建立物件
• 現在有個使用者這麼使用ArrayList,會拋
出java.lang.ClassCastException,
告訴你不可以將Object[]當作String[]
來使用
27
從Class建立物件
• 可以如下解決:
28
操作物件方法與成員
• java.lang.reflect.Method實例是方法
的代表物件,可以使用invoke()方法來動
態呼叫指定的方法
29
操作物件方法與成員
• 底下會設計一個BeanUtil類別,可以指定
Map物件與類別名稱呼叫getBean()方法,
這個方法會抽取Map內容並封裝為指定類別
的實例
– 例如Map中收集了學生資料,則以下傳回的就是
Student實例
30
31
操作物件方法與成員
• 想呼叫受保護的(protected)或私有
(private)方法
32
操作物件方法與成員
• 可以使用反射機制存取類別資料成員(Field)
33
操作物件方法與成員
• setAccessible(true)時,如果模組權限
設定上不允許,會拋出
java.lang.reflect.InaccessibleOb
jectException
• 就目前來說,上面的程式片段中
setAccessible(true)可以用於同一模組
的類別,然而不能用於java.base中的類別
• 因為java.base模組並沒有開放權限
34
動態代理
• 需要在執行某些方法時進行日誌記錄,你可
能會如下撰寫:
35
靜態代理
• 在靜態代理實現中,代理物件與被代理物件
必須實現同一介面
36
靜態代理
• 代理物件同樣也要實現Hello介面
37
靜態代理
• 可以如下使用代理物件:
38
動態代理
• 使用動態代理機制,可使用一個處理者
(Handler)代理多個介面的實作物件
39
40
動態代理
• 使用LoggingHandler的bind()方法來綁
定被代理物件
41
當反射遇上模組
• 對於JDK8以及先前版本的JDK,就算開發者
不願意,只要程式庫的使用者運用反射,就
可以訪問類別定義的成員
• 這包括了公開、受保護與私有成員,事實上
,在Java的生態圈中
• 有不少程式庫或框架,都依賴在這種深層反
射(Deep reflection)機制上運作
42
當反射遇上模組
• JDK9的模組是為了強封裝,若反射機制依舊
可以這般自由,那麼模組就失去了強封裝的
意義
• 然而,也必須考慮現存程式庫或框架依賴於
深層反射的現況,否則這些程式庫或框架將
不會考慮遷移至JDK9
43
當反射遇上模組
• 模組的設計者可以決定是否允許反射
• 範例檔labsCH17ReflectModule
44
45
模組圖
• 一個模組在模組路徑之中,只是表示JVM可
以找到模組描述檔(module-info.class)
• 不代表模組圖(Module graph)中有這個模
組,模組圖中不存在的模組,自然就找不到
模組中的類別
46
• 要將模組加入模組圖的方式之一,是在執行
java指令啟動JVM時,使用--add-
modules引數加入其他模組作為根模組
• 如果執行java指令指定了--add-modules
cc.openhome.reflect
47
• 另一個將指定模組加入模組圖方式是,在模
組描述檔中加入requires設定
• 現有模組會依賴在requires的模組之上
• 現有模組可以讀取(read)該模組,或稱現
在模組對該模組有讀取能力(Readability)
48
49
50
exports套件
• 若模組能允許其他模組對指定的公開成員進
行操作,必須在模組描述檔使用exports定義
哪些套件中的類別是可以允許此動作
• 更確切的說法是,指定此模組中哪些套件中
的公開成員可以存取(Accessibility)
51
52
53
54
55
opens套件或open模組
• 若模組能允許其他模組在反射時,對指定的
非公開成員進行操作,必須在模組描述檔使
用opens定義哪些套件中的類別是可以允許
此動作
56
• 除了使用opens指定要開放的套件之外,也
可以使用 open module,表示開放這個模
組中全部的套件
• 如果使用了open module,那麼module中
的定義就不能再有opens的獨立設定
• 被設定為open module的模組被稱為開放
模組(Open Module)
• 沒有open的模組稱為一般模組(Normal
module),它們都屬於顯式模組。
57
• java.base模組中的套件使用了exports
• 沒有設定opens的套件,也沒有直接open
module java.base
• 若採取模組化設計,就不允許其他模組在反
射時,對指定的非公開成員進行操作
58
使用ServiceLoader
• 如果Player是種API服務,更實際的場景會
是,Player會是服務的介面之一,它也許是
定義在cc.openhome.api套件之中
• ConsolePlayer是服務的具體實現,可能
定義在cc.openhome.impl套件之中
• MediaMaster是你正在設計的應用程式,
定義在cc.openhome套件之中
• 拆成三個模組
59
使用ServiceLoader
60
61
62
• java.sql模組的module-info.java定義
63
JDK9類別載入器階層
• 在JDK9中,有三種層次的類別載入器負責載
入類別
– System類別載入器(也稱為Application載入器)
– Platform類別載入器
– Bootstrap類別載入器
64
JDK9類別載入器階層
• System的父載入器為Platform,而Platform
的父載入器為Bootstrap
65
• System類別載入器可以載入應用程式模組路
徑、類別路徑上的類別
• Platform載入器可以載入整個Java SE 平臺
API、實作類別
• Bootstrap類別載入器是JVM內建的載入器
66
67
建立ClassLoader實例
• Bootstrap Loader、Platform Loader與System
Loader在程式啟動後,就無法再改變它們的
搜尋路徑
• 可以使用URLClassLoader來產生新的類別
載入器
68
建立ClassLoader實例
• 由同一類別載入器載入的.class檔案,只會有
一個Class實例
• 如果同一.class檔案由兩個不同的類別載入器
載入,則會有兩份不同的Class實例
69
70

More Related Content

What's hot

Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Justin Lin
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJustin Lin
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Justin Lin
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫Justin Lin
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]ReflectionArBing Xie
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJustin Lin
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換Justin Lin
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Justin Lin
 
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別Justin Lin
 
CH09:Collection與Map
CH09:Collection與MapCH09:Collection與Map
CH09:Collection與MapJustin Lin
 
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Justin Lin
 
CH04:認識物件
CH04:認識物件CH04:認識物件
CH04:認識物件Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用APIJustin Lin
 
10, inner classes
10, inner classes10, inner classes
10, inner classested-xu
 
從模組到類別
從模組到類別從模組到類別
從模組到類別Justin Lin
 

What's hot (20)

Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與MapJava SE 7 技術手冊投影片第 09 章 - Collection與Map
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫
 
[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection[圣思园][Java SE]Reflection
[圣思园][Java SE]Reflection
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
 
5. 建構式、原型與類別
5. 建構式、原型與類別5. 建構式、原型與類別
5. 建構式、原型與類別
 
CH09:Collection與Map
CH09:Collection與MapCH09:Collection與Map
CH09:Collection與Map
 
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件Java SE 7 技術手冊投影片第 04 章 - 認識物件
Java SE 7 技術手冊投影片第 04 章 - 認識物件
 
CH04:認識物件
CH04:認識物件CH04:認識物件
CH04:認識物件
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
進階主題
進階主題進階主題
進階主題
 
Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
 
10, inner classes
10, inner classes10, inner classes
10, inner classes
 
從模組到類別
從模組到類別從模組到類別
從模組到類別
 

Similar to 反射與類別載入器

Java类加载器
Java类加载器Java类加载器
Java类加载器Fu Cheng
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programmingted-xu
 
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJustin Lin
 
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scalajavatwo2011
 
ClassLoader简析
ClassLoader简析ClassLoader简析
ClassLoader简析wavefly
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Justin Lin
 
flagboot learning framework technology sharing
flagboot learning framework technology sharingflagboot learning framework technology sharing
flagboot learning framework technology sharingxastraxastra
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇modou li
 
CH02:從JDK到IDE
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDEJustin Lin
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Justin Lin
 

Similar to 反射與類別載入器 (12)

Java类加载器
Java类加载器Java类加载器
Java类加载器
 
Jdk5
Jdk5Jdk5
Jdk5
 
Reflection
ReflectionReflection
Reflection
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDEJava SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
 
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala
 
ClassLoader简析
ClassLoader简析ClassLoader简析
ClassLoader简析
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
 
flagboot learning framework technology sharing
flagboot learning framework technology sharingflagboot learning framework technology sharing
flagboot learning framework technology sharing
 
Python面向对象开发基础篇
Python面向对象开发基础篇Python面向对象开发基础篇
Python面向对象开发基础篇
 
CH02:從JDK到IDE
CH02:從JDK到IDECH02:從JDK到IDE
CH02:從JDK到IDE
 
Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00Java Tutorial:Learn Java in 06:00:00
Java Tutorial:Learn Java in 06:00:00
 

More from Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組Justin Lin
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理Justin Lin
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承Justin Lin
 

More from Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 
7. 例外處理
7. 例外處理7. 例外處理
7. 例外處理
 
6. 類別的繼承
6. 類別的繼承6. 類別的繼承
6. 類別的繼承
 

反射與類別載入器