SlideShare a Scribd company logo
1 of 79
Download to read offline
1
從JDK到IDE
學習目標
• 瞭解與設定PATH
• 瞭解與指定CLASSPATH、SOURCEPATH
• 使用package與import管理類別
• 初探模組平台系統
• 認識JDK與IDE的對應
2
撰寫Java原始碼
3
撰寫Java原始碼
4
撰寫Java原始碼
• 副檔名是 .java
• 主檔名與類別名稱必須相同
• 注意每個字母大小寫
• 空白只能是半型空白字元或是Tab字元
5
PATH是什麼?
6
PATH是什麼?
7
PATH是什麼?
8
PATH是什麼?
9
10
PATH是什麼?
• 建議將JDK的bin路徑放在Path變數的最前方
– 因為系統搜尋Path路徑時,會從最前方開始,如果路徑
下找到指定的工具程式就會直接執行
• 若系統中安裝兩個以上JDK時,Path路徑中設定的
順序,將決定執行哪個JDK下的工具程式
• 在安裝了多個JDK或JRE的電腦中,確定執行了哪
個版本的JDK或JRE非常重要,確定PATH資訊是一
定要作的動作
11
JVM(java)與CLASSPATH
12
JVM(java)與CLASSPATH
• 實體作業系統下執行某個指令時,會依PATH中的路
徑資訊,試圖找到可執行檔案
• JVM是Java程式唯一認得的作業系統,對JVM來說,
可執行檔就是副檔名為.class的檔案
• 想在JVM中執行某個可執行檔(.class),就要告訴
JVM這個虛擬作業系統到哪些路徑下尋找檔案,方
式是透過CLASSPATH指定其可執行檔(.class)的
路徑資訊
13
JVM(java)與CLASSPATH
14
JVM(java)與CLASSPATH
• 如果在JVM的CLASSPATH路徑資訊中都找不
到指定的類別檔案
– JDK7前會出現
java.lang.NoClassDefFoundError訊息,
而JDK7之後的版本會有比較友善的中文錯誤訊
息
15
JVM(java)與CLASSPATH
• JVM預設的CLASSPATH就是讀取目前資料夾
中的.class
• 如果自行指定CLASSPATH,則以指定的為主
16
JVM(java)與CLASSPATH
• 希望也從目前資料夾開始尋找類別檔案,則
可以使用.指定
17
JVM(java)與CLASSPATH
• 程式庫中的類別檔案,會封裝為JAR(Java
Archive)檔案,也就是副檔名為.jar的檔案
– 使用ZIP格式壓縮,當中包含一堆.class檔案
• 例如,有abc.jar與xyz.jar放在C:lib底下,執
行時若要使用JAR檔案中的類別檔案:
18
JVM(java)與CLASSPATH
• 如果有些類別路徑很常使用,其實也可以透
過環境變數設定。例如:
• 在啟動JVM時,也就是執行java時,若沒使
用-cp或-classpath指定CLASSPATH,就會讀
取CLASSPATH環境變數
19
JVM(java)與CLASSPATH
• 從Java SE 6開始,可以使用*表示使用資料夾
中所有.jar檔案
• 例如指定使用C:jars下所有JAR檔案:
20
編譯器(javac)與CLASSPATH
• 在光碟中labs/CH2資料夾中有個classes資料夾,
請將之複製至C:workspace中,確認
C:workspaceclasses中有個已編譯的
Console.class
21
編譯器(javac)與CLASSPATH
• 可以在C:workspace中開個Main.java,如下使
用Console類別
22
編譯器(javac)與CLASSPATH
23
編譯器(javac)與CLASSPATH
24
管理原始碼與位元碼檔案
• 來觀察一下目前你的C:workspace,原始碼
(.java)檔案與位元碼檔案(.class)都放在
一起
• 想像一下,如果程式規模稍大,一堆.java
與.class檔案還放在一起,會有多麼混亂
• 你需要有效率地管理原始嗎與位元碼檔案
25
編譯器(javac)與SOURCEPATH
• 請將光碟中labs資料夾的Hello1資料夾複製至
C:workspace中
• Hello1資料夾中有src與classes資料夾,src資
料夾中有Console.java與Main.java兩個檔案
26
編譯器(javac)與SOURCEPATH
• src資料夾將用來放置原始碼檔案,而編譯好
的位元碼檔案,希望能指定存放至classes資
料夾
27
編譯器(javac)與SOURCEPATH
• 使用-sourcepath指定從src資料夾中尋找原
始碼檔案,而-d指定了編譯完成的位元碼存
放資料夾
• 編譯器會將使用到的相關類別原始碼也一併
進行編譯
28
編譯器(javac)與SOURCEPATH
• 可以在編譯時指定-verbose引數,看到編譯
器進行編譯時的過程
29
30
編譯器(javac)與SOURCEPATH
• 實際專案中會有數以萬計的類別,如果每次
都要重新將.java編譯為.class,那會是非常費
時的工作
• 編譯時若類別路徑中已存在位元碼,且上次
編譯後,原始碼並沒有修改,無需重新編譯
會比較節省時間
31
32
使用package管理類別
• .java放在src資料夾中,編譯出來的.class放置
在classes資料夾下
• 就如同你會分不同資料夾來放置不同作用的
檔案,類別也應該分門別類加以放置,
• 無論是實體檔案上的分類管理,或是類別名
稱上的分類管理,有個package關鍵字,可
以協助你達到這個目的
33
使用package管理類別
• 用編輯器開啟2.2.2中Hello1/src資料夾中的
Console.java,在開頭鍵入下圖反白的文字:
• Console類別將放在cc.openhome.util的分類
下,以Java的術語來說,Console這個類別將放在
cc.openhome.util套件(package)
34
使用package管理類別
• 再用文字編輯器開啟2.2.2中Hello1/src資料夾
中的Main.java,在開頭鍵入下圖反白的文字
• 這表示Main類別將放在cc.openhome的分
類下
35
使用package管理類別
• 原始碼檔案要放置在與package所定義名稱階層相
同的資料夾階層
• package所定義名稱與class所定義名稱,會結合而
成類別的完全吻合名稱(Fully qualified name)
• 位元碼檔案要放置在與package所定義名稱階層相
同的資料夾階層
• 要在套件間可以直接使用的類別或方法(Method)
必須宣告為public
36
原始碼檔案與套件管理
• 由於Console類別使用package定義在
cc.openhome.util套件下,所以
Console.java必須放在src資料夾中的
cc/openhome/util資料夾
• Main類別使用package定義在
cc.openhome套件下,所以Main.java必須
放在src資料夾中的cc/openhome資料夾
37
完全吻合名稱(Fully qualified name)
• Main類別是位於cc.openhome套件分類中,
其完全吻合名稱是cc.openhome.Main
• Console類別是位於cc.openhome.util
分類中,其完全吻合名稱為
cc.openhome.util.Console
38
• 如果是相同套件中的類別,只要使用class
所定義的名稱即可
• 不同套件的類別,必須使用完全吻合名稱
• 由於Main與Console類別是位於不同的套
件中
完全吻合名稱(Fully qualified name)
39
位元碼檔案與套件管理
• 由於Console類別使用package定義在
cc.openhome.util套件下,所以編譯出
來的Console.class必須放在classes資料夾中的
cc/openhome/util資料夾
• Main類別使用package定義在
cc.openhome套件下,所以Main.class必須
放在classes資料夾中的cc/openhome資料夾
40
位元碼檔案與套件管理
• 在編譯時若有使用-d指定位元碼的存放位置,
就會自動建立出對應套件階層的資料夾,並
將編譯出來的位元碼檔案放置至應有的位置
41
使用import偷懶
• 每次撰寫程式時,都得鍵入完全吻合名稱,
也是件麻煩的事 …
42
使用import偷懶
• import只是告訴編譯器,遇到不認識的類別
名稱,可以嘗試使用import過的名稱
• import讓你少打一些字,讓編譯器多為你作
一些事
43
使用import偷懶
• 如果同一套件下會使用到多個類別,你也許
會多次使用import:
• 你可以更偷懶一些,用以下的import語句:
44
使用import偷懶
• 偷懶也是有個限度,如果你自己寫了一個
Arrays:
• 若在某個類別中撰寫有以下的程式碼:
45
使用import偷懶
• 底該使用cc.openhome.Arrays還是
java.util.Arrays?
46
使用import偷懶
• 遇到這種情況時,就不能偷懶了,你要使用
哪個類別名稱,就得明確地逐字打出來:
47
使用import偷懶
• 寫第一個Java程式時使用的System類別,其
實也有使用套件管理,完整名稱其實是
java.lang.System
• 在java.lang套件下的類別由於很常用,不
用撰寫import也可以直接使用class定義
的名稱
48
使用import偷懶
• 當編譯器看到一個沒有套件管理的類別名稱,
會先在同一套件中尋找類別,如果找到就使
用,若沒找到,再試著從import陳述進行比
對
• java.lang可視為預設就有import,沒有
寫任何import陳述時,也會試著比對
java.lang組合,看看是否能找到對應類別
49
初探模組平臺系統
• Java SE 9的重大特性之一
• 雖然基於相容性,你仍然可以使用基於類別
路徑的方式來組織、建立程式庫
• Java SE 9的標準API已經劃分為各個模組
• 你在查詢API文件、使用其他運用了模組的程
式庫時,總是會面對模組相關訊息
50
JVM(java)與module-path
• 模組平臺系統要知道的第一件事是,它跟
Java程式語言本身沒有關係
• 是為了管理程式庫本身的功能封裝、程式庫
之間的相依性等需求而存在
51
• 請複製範例檔中labs/CH02資料夾中的Hello2
資料夾至C:workspace
52
• 第一件事是決定模組名稱,這邊假設模組名
稱為cc.openhome
• 建議建立一個與模組名稱相同的資料夾,然
後其中依套件設定的階層放入原始碼
53
• 在cc.openhome資料夾中建立一個module-
info.java
54
• 雖然module-info.java的副檔名為.java,它實
際上只是個設定檔
• 其中的module關鍵字僅在這個設定檔中進行
設定之用,不是Java程式語言的一部份
• 副檔名為.java,單純只是為了相容性,讓
javac等工具程式易於處理這個設定檔
55
• 目前只能存取同一模組中的API,並且依賴
在Java標準API的java.base模組
• java.base模組包含且exports了
java.lang等常用套件
• 可以在module-info.java中設定自己的模組可
以公開哪些API,或者是依賴在哪個模組之
上。
56
57
編譯器(javac)與module-
path
• 製範例檔中labs/CH02的Hello3資料夾至
C:workspace
58
59
編譯器(javac)與module-
source-path
60
• 可以暫時將--module-path與--module-
source-path想像成-classpath與-
sourcepath的對應物
61
IDE專案管理基礎
62
IDE專案管理基礎
63
IDE專案管理基礎
64
65
66
使用了哪個JRE?
• 因為各種原因,你的電腦中可能不只存在一
套JRE!
• 在文字模式下鍵入java指令,如果設定了
PATH,會執行PATH 順序下找到的
第一個java可執行檔,這個可執行檔所啟動
的是哪套JRE?
67
使用了哪個JRE?
• 在執行java指令時,可附帶一個-version
引數,這可以顯示執行的JRE版本
68
使用了哪個JRE?
• 如果有個需求是切換JRE,文字模式下必須
設定PATH順序中,找到的第一個JRE之 bin資
料夾是你想要的JRE,而不是設定
CLASSPATH
• 如果使用IDE新增專案,你使用了哪個JRE呢?
69
類別檔案版本
• 如果使用新版本JDK編譯出位元碼檔案,在
舊版本JRE上執行,可能發生以下錯誤訊息…
70
類別檔案版本
• 編譯器會在位元碼檔案中標示主版本號與次
版本號,不同的版本號,位元碼檔案格式可
能有所不同
• JVM在載入位元碼檔案後,會確認其版本號
是否在可接受的範圍,否則就不會處理該位
元碼檔案
71
類別檔案版本
• 可以使用JDK工具程式javap,確認位元碼
檔案的版本號:
72
類別檔案版本
• System.getProperty(“java.class.v
ersion”)可取得JRE支援的位元碼版本號
• System.getProperty(“java.runtime
.version”)可取得JRE版本訊息
73
類別檔案版本
• 在編譯的時候,可以使用-target指定編譯
出來的位元碼,必須符合指定平台允許的版
本號
• 使用-source要求編譯器檢查使用的語法,
不超過指定的版本
74
類別檔案版本
75
類別檔案版本
• 在不指定-target與-source的情況下,編
譯器會有預設的-target值
• JDK9預設的-target與-source都是1.9
• -target在指定時,值必須大於或等於-
source
76
類別檔案版本
• 如果只指定-source與-target進行編譯,會出現
警示訊息,這是因為編譯時預設的Bootstrap類別載
入器(Class loader)沒有改變
• 系統預設的類別載入器仍參考至1.9的相關類別
• 如果引用到一些舊版JRE沒有的新API,就會造成在
舊版JRE上無法執行
• 最好是編譯時指定-bootclasspath,參考至舊版
的rt.jar,這樣在舊版JRE執行時比較不會發生問題
77
• JDK9中使用javac時,可以使用--
release引數一次指定指定-source、-
target與-bootclasspath
78
類別檔案版本
• 那麼在IDE中如何設定-source與-target
對應的選項呢?以 NetBeans 為例…
79

More Related Content

What's hot

Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用APIJustin Lin
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝Justin 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
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Justin Lin
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Justin Lin
 
CH17:反射與類別載入器
CH17:反射與類別載入器CH17:反射與類別載入器
CH17:反射與類別載入器Justin Lin
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫Justin Lin
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Justin Lin
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJustin Lin
 
Java平台概論
Java平台概論Java平台概論
Java平台概論Justin Lin
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Justin Lin
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南HonestQiao
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJustin Lin
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化Justin Lin
 
深入模組化
深入模組化深入模組化
深入模組化Justin Lin
 
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Justin Lin
 
CH11:執行緒與並行API
CH11:執行緒與並行APICH11:執行緒與並行API
CH11:執行緒與並行APIJustin Lin
 

What's hot (20)

Java SE 7 技術手冊投影片第 12 章 - 通用API
Java SE 7 技術手冊投影片第 12 章  - 通用APIJava SE 7 技術手冊投影片第 12 章  - 通用API
Java SE 7 技術手冊投影片第 12 章 - 通用API
 
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Java SE 7 技術手冊投影片第 05 章  - 物件封裝Java SE 7 技術手冊投影片第 05 章  - 物件封裝
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
 
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
 
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
 
CH17:反射與類別載入器
CH17:反射與類別載入器CH17:反射與類別載入器
CH17:反射與類別載入器
 
CH16:整合資料庫
CH16:整合資料庫CH16:整合資料庫
CH16:整合資料庫
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Java SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用APIJava SE 8 技術手冊第 15 章 - 通用API
Java SE 8 技術手冊第 15 章 - 通用API
 
Java平台概論
Java平台概論Java平台概論
Java平台概論
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
 
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行APIJava SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
 
CH19:深入模組化
CH19:深入模組化CH19:深入模組化
CH19:深入模組化
 
深入模組化
深入模組化深入模組化
深入模組化
 
Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件Java SE 8 技術手冊第 4 章 - 認識物件
Java SE 8 技術手冊第 4 章 - 認識物件
 
CH11:執行緒與並行API
CH11:執行緒與並行APICH11:執行緒與並行API
CH11:執行緒與並行API
 

Similar to 從JDK到IDE

Java类加载器
Java类加载器Java类加载器
Java类加载器Fu Cheng
 
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scalajavatwo2011
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由Shengyou Fan
 
2. java introduction
2. java introduction2. java introduction
2. java introductionnetdbncku
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]yiditushe
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定Shengyou Fan
 
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物yiditushe
 

Similar to 從JDK到IDE (9)

Java类加载器
Java类加载器Java类加载器
Java类加载器
 
如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala如何在 Java App 中導入 Scala
如何在 Java App 中導入 Scala
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由給你一個使用 Laravel 的理由
給你一個使用 Laravel 的理由
 
2. java introduction
2. java introduction2. java introduction
2. java introduction
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
 
beidakejian
beidakejianbeidakejian
beidakejian
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
Java 推荐读物
Java 推荐读物Java 推荐读物
Java 推荐读物
 

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
 
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
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組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 自訂標籤
 
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 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 
8. open() 與 io 模組
8. open() 與 io 模組8. open() 與 io 模組
8. open() 與 io 模組
 

從JDK到IDE