SlideShare a Scribd company logo
Submit Search
Upload
從JDK到IDE
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
1 like
•
962 views
1
of
79
從JDK到IDE
•
1 like
•
962 views
Report
Share
Download Now
Download to read offline
Technology
瞭解與設定PATH 瞭解與指定CLASSPATH、SOURCEPATH 使用package與import管理類別 初探模組平台系統 認識JDK與IDE的對應
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE by
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
3.6K views
•
66 slides
Java SE 8 技術手冊第 2 章 - 從JDK到IDE by
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
5.3K views
•
66 slides
2. 從 REPL 到 IDE by
2. 從 REPL 到 IDE
Justin Lin
234 views
•
28 slides
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫 by
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
2.1K views
•
100 slides
Java SE 7 技術手冊投影片第 09 章 - Collection與Map by
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
2.5K views
•
68 slides
CH02:從JDK到IDE by
CH02:從JDK到IDE
Justin Lin
481 views
•
58 slides
More Related Content
What's hot
Java SE 7 技術手冊投影片第 12 章 - 通用API by
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
2.2K views
•
126 slides
Java SE 7 技術手冊投影片第 05 章 - 物件封裝 by
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
2.6K views
•
75 slides
Java Tutorial:Learn Java in 06:00:00 by
Java Tutorial:Learn Java in 06:00:00
Justin Lin
27.5K views
•
98 slides
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器 by
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
1.9K views
•
48 slides
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2 by
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
5.6K views
•
66 slides
Ch07 使用 JSTL by
Ch07 使用 JSTL
Justin Lin
161 views
•
74 slides
What's hot
(20)
Java SE 7 技術手冊投影片第 12 章 - 通用API by Justin Lin
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
•
2.2K views
Java SE 7 技術手冊投影片第 05 章 - 物件封裝 by Justin Lin
Java SE 7 技術手冊投影片第 05 章 - 物件封裝
Justin Lin
•
2.6K views
Java Tutorial:Learn Java in 06:00:00 by Justin Lin
Java Tutorial:Learn Java in 06:00:00
Justin Lin
•
27.5K views
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器 by Justin Lin
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
•
1.9K views
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2 by Justin Lin
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
•
5.6K views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
Java SE 8 技術手冊第 17 章 - 反射與類別載入器 by Justin Lin
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
•
2.3K views
CH17:反射與類別載入器 by Justin Lin
CH17:反射與類別載入器
Justin Lin
•
280 views
CH16:整合資料庫 by Justin Lin
CH16:整合資料庫
Justin Lin
•
359 views
Java SE 7 技術手冊投影片第 01 章 - Java平台概論 by Justin Lin
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
•
5.9K views
Java SE 8 技術手冊第 5 章 - 物件封裝 by Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
•
3.4K views
Java SE 8 技術手冊第 15 章 - 通用API by Justin Lin
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
•
2.2K views
Java平台概論 by Justin Lin
Java平台概論
Justin Lin
•
2.4K views
Java SE 8 技術手冊第 16 章 - 整合資料庫 by Justin Lin
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
•
2.9K views
Coreseek/Sphinx 全文检索实践指南 by HonestQiao
Coreseek/Sphinx 全文检索实践指南
HonestQiao
•
1.1K views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API by Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
CH19:深入模組化 by Justin Lin
CH19:深入模組化
Justin Lin
•
791 views
深入模組化 by Justin Lin
深入模組化
Justin Lin
•
1K views
Java SE 8 技術手冊第 4 章 - 認識物件 by Justin Lin
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
•
4.2K views
CH11:執行緒與並行API by Justin Lin
CH11:執行緒與並行API
Justin Lin
•
320 views
Similar to 從JDK到IDE
Java类加载器 by
Java类加载器
Fu Cheng
1K views
•
24 slides
如何在 Java App 中導入 Scala by
如何在 Java App 中導入 Scala
javatwo2011
1.4K views
•
82 slides
千呼萬喚始出來的 Java SE 7 by
千呼萬喚始出來的 Java SE 7
Justin Lin
1.9K views
•
103 slides
給你一個使用 Laravel 的理由 by
給你一個使用 Laravel 的理由
Shengyou Fan
7.9K views
•
66 slides
2. java introduction by
2. java introduction
netdbncku
1.4K views
•
115 slides
Java Jdk6学习笔记[Ppt] by
Java Jdk6学习笔记[Ppt]
yiditushe
1.4K views
•
619 slides
Similar to 從JDK到IDE
(9)
Java类加载器 by Fu Cheng
Java类加载器
Fu Cheng
•
1K views
如何在 Java App 中導入 Scala by javatwo2011
如何在 Java App 中導入 Scala
javatwo2011
•
1.4K views
千呼萬喚始出來的 Java SE 7 by Justin Lin
千呼萬喚始出來的 Java SE 7
Justin Lin
•
1.9K views
給你一個使用 Laravel 的理由 by Shengyou Fan
給你一個使用 Laravel 的理由
Shengyou Fan
•
7.9K views
2. java introduction by netdbncku
2. java introduction
netdbncku
•
1.4K views
Java Jdk6学习笔记[Ppt] by yiditushe
Java Jdk6学习笔记[Ppt]
yiditushe
•
1.4K views
beidakejian by hanxuebing
beidakejian
hanxuebing
•
367 views
專案啟動與環境設定 by Shengyou Fan
專案啟動與環境設定
Shengyou Fan
•
9K views
Java 推荐读物 by yiditushe
Java 推荐读物
yiditushe
•
212 views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
233 views
•
92 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
237 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
10. 資料永續與交換 by Justin Lin
10. 資料永續與交換
Justin Lin
•
156 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組
Justin Lin
•
245 views
從JDK到IDE
1.
1
2.
從JDK到IDE 學習目標 • 瞭解與設定PATH • 瞭解與指定CLASSPATH、SOURCEPATH •
使用package與import管理類別 • 初探模組平台系統 • 認識JDK與IDE的對應 2
3.
撰寫Java原始碼 3
4.
撰寫Java原始碼 4
5.
撰寫Java原始碼 • 副檔名是 .java •
主檔名與類別名稱必須相同 • 注意每個字母大小寫 • 空白只能是半型空白字元或是Tab字元 5
6.
PATH是什麼? 6
7.
PATH是什麼? 7
8.
PATH是什麼? 8
9.
PATH是什麼? 9
10.
10
11.
PATH是什麼? • 建議將JDK的bin路徑放在Path變數的最前方 – 因為系統搜尋Path路徑時,會從最前方開始,如果路徑 下找到指定的工具程式就會直接執行 •
若系統中安裝兩個以上JDK時,Path路徑中設定的 順序,將決定執行哪個JDK下的工具程式 • 在安裝了多個JDK或JRE的電腦中,確定執行了哪 個版本的JDK或JRE非常重要,確定PATH資訊是一 定要作的動作 11
12.
JVM(java)與CLASSPATH 12
13.
JVM(java)與CLASSPATH • 實體作業系統下執行某個指令時,會依PATH中的路 徑資訊,試圖找到可執行檔案 • JVM是Java程式唯一認得的作業系統,對JVM來說, 可執行檔就是副檔名為.class的檔案 •
想在JVM中執行某個可執行檔(.class),就要告訴 JVM這個虛擬作業系統到哪些路徑下尋找檔案,方 式是透過CLASSPATH指定其可執行檔(.class)的 路徑資訊 13
14.
JVM(java)與CLASSPATH 14
15.
JVM(java)與CLASSPATH • 如果在JVM的CLASSPATH路徑資訊中都找不 到指定的類別檔案 – JDK7前會出現 java.lang.NoClassDefFoundError訊息, 而JDK7之後的版本會有比較友善的中文錯誤訊 息 15
16.
JVM(java)與CLASSPATH • JVM預設的CLASSPATH就是讀取目前資料夾 中的.class • 如果自行指定CLASSPATH,則以指定的為主 16
17.
JVM(java)與CLASSPATH • 希望也從目前資料夾開始尋找類別檔案,則 可以使用.指定 17
18.
JVM(java)與CLASSPATH • 程式庫中的類別檔案,會封裝為JAR(Java Archive)檔案,也就是副檔名為.jar的檔案 – 使用ZIP格式壓縮,當中包含一堆.class檔案 •
例如,有abc.jar與xyz.jar放在C:lib底下,執 行時若要使用JAR檔案中的類別檔案: 18
19.
JVM(java)與CLASSPATH • 如果有些類別路徑很常使用,其實也可以透 過環境變數設定。例如: • 在啟動JVM時,也就是執行java時,若沒使 用-cp或-classpath指定CLASSPATH,就會讀 取CLASSPATH環境變數 19
20.
JVM(java)與CLASSPATH • 從Java SE
6開始,可以使用*表示使用資料夾 中所有.jar檔案 • 例如指定使用C:jars下所有JAR檔案: 20
21.
編譯器(javac)與CLASSPATH • 在光碟中labs/CH2資料夾中有個classes資料夾, 請將之複製至C:workspace中,確認 C:workspaceclasses中有個已編譯的 Console.class 21
22.
編譯器(javac)與CLASSPATH • 可以在C:workspace中開個Main.java,如下使 用Console類別 22
23.
編譯器(javac)與CLASSPATH 23
24.
編譯器(javac)與CLASSPATH 24
25.
管理原始碼與位元碼檔案 • 來觀察一下目前你的C:workspace,原始碼 (.java)檔案與位元碼檔案(.class)都放在 一起 • 想像一下,如果程式規模稍大,一堆.java 與.class檔案還放在一起,會有多麼混亂 •
你需要有效率地管理原始嗎與位元碼檔案 25
26.
編譯器(javac)與SOURCEPATH • 請將光碟中labs資料夾的Hello1資料夾複製至 C:workspace中 • Hello1資料夾中有src與classes資料夾,src資 料夾中有Console.java與Main.java兩個檔案 26
27.
編譯器(javac)與SOURCEPATH • src資料夾將用來放置原始碼檔案,而編譯好 的位元碼檔案,希望能指定存放至classes資 料夾 27
28.
編譯器(javac)與SOURCEPATH • 使用-sourcepath指定從src資料夾中尋找原 始碼檔案,而-d指定了編譯完成的位元碼存 放資料夾 • 編譯器會將使用到的相關類別原始碼也一併 進行編譯 28
29.
編譯器(javac)與SOURCEPATH • 可以在編譯時指定-verbose引數,看到編譯 器進行編譯時的過程 29
30.
30
31.
編譯器(javac)與SOURCEPATH • 實際專案中會有數以萬計的類別,如果每次 都要重新將.java編譯為.class,那會是非常費 時的工作 • 編譯時若類別路徑中已存在位元碼,且上次 編譯後,原始碼並沒有修改,無需重新編譯 會比較節省時間 31
32.
32
33.
使用package管理類別 • .java放在src資料夾中,編譯出來的.class放置 在classes資料夾下 • 就如同你會分不同資料夾來放置不同作用的 檔案,類別也應該分門別類加以放置, •
無論是實體檔案上的分類管理,或是類別名 稱上的分類管理,有個package關鍵字,可 以協助你達到這個目的 33
34.
使用package管理類別 • 用編輯器開啟2.2.2中Hello1/src資料夾中的 Console.java,在開頭鍵入下圖反白的文字: • Console類別將放在cc.openhome.util的分類 下,以Java的術語來說,Console這個類別將放在 cc.openhome.util套件(package) 34
35.
使用package管理類別 • 再用文字編輯器開啟2.2.2中Hello1/src資料夾 中的Main.java,在開頭鍵入下圖反白的文字 • 這表示Main類別將放在cc.openhome的分 類下 35
36.
使用package管理類別 • 原始碼檔案要放置在與package所定義名稱階層相 同的資料夾階層 • package所定義名稱與class所定義名稱,會結合而 成類別的完全吻合名稱(Fully
qualified name) • 位元碼檔案要放置在與package所定義名稱階層相 同的資料夾階層 • 要在套件間可以直接使用的類別或方法(Method) 必須宣告為public 36
37.
原始碼檔案與套件管理 • 由於Console類別使用package定義在 cc.openhome.util套件下,所以 Console.java必須放在src資料夾中的 cc/openhome/util資料夾 • Main類別使用package定義在 cc.openhome套件下,所以Main.java必須 放在src資料夾中的cc/openhome資料夾 37
38.
完全吻合名稱(Fully qualified name) •
Main類別是位於cc.openhome套件分類中, 其完全吻合名稱是cc.openhome.Main • Console類別是位於cc.openhome.util 分類中,其完全吻合名稱為 cc.openhome.util.Console 38
39.
• 如果是相同套件中的類別,只要使用class 所定義的名稱即可 • 不同套件的類別,必須使用完全吻合名稱 •
由於Main與Console類別是位於不同的套 件中 完全吻合名稱(Fully qualified name) 39
40.
位元碼檔案與套件管理 • 由於Console類別使用package定義在 cc.openhome.util套件下,所以編譯出 來的Console.class必須放在classes資料夾中的 cc/openhome/util資料夾 • Main類別使用package定義在 cc.openhome套件下,所以Main.class必須 放在classes資料夾中的cc/openhome資料夾 40
41.
位元碼檔案與套件管理 • 在編譯時若有使用-d指定位元碼的存放位置, 就會自動建立出對應套件階層的資料夾,並 將編譯出來的位元碼檔案放置至應有的位置 41
42.
使用import偷懶 • 每次撰寫程式時,都得鍵入完全吻合名稱, 也是件麻煩的事 … 42
43.
使用import偷懶 • import只是告訴編譯器,遇到不認識的類別 名稱,可以嘗試使用import過的名稱 • import讓你少打一些字,讓編譯器多為你作 一些事 43
44.
使用import偷懶 • 如果同一套件下會使用到多個類別,你也許 會多次使用import: • 你可以更偷懶一些,用以下的import語句: 44
45.
使用import偷懶 • 偷懶也是有個限度,如果你自己寫了一個 Arrays: • 若在某個類別中撰寫有以下的程式碼: 45
46.
使用import偷懶 • 底該使用cc.openhome.Arrays還是 java.util.Arrays? 46
47.
使用import偷懶 • 遇到這種情況時,就不能偷懶了,你要使用 哪個類別名稱,就得明確地逐字打出來: 47
48.
使用import偷懶 • 寫第一個Java程式時使用的System類別,其 實也有使用套件管理,完整名稱其實是 java.lang.System • 在java.lang套件下的類別由於很常用,不 用撰寫import也可以直接使用class定義 的名稱 48
49.
使用import偷懶 • 當編譯器看到一個沒有套件管理的類別名稱, 會先在同一套件中尋找類別,如果找到就使 用,若沒找到,再試著從import陳述進行比 對 • java.lang可視為預設就有import,沒有 寫任何import陳述時,也會試著比對 java.lang組合,看看是否能找到對應類別 49
50.
初探模組平臺系統 • Java SE
9的重大特性之一 • 雖然基於相容性,你仍然可以使用基於類別 路徑的方式來組織、建立程式庫 • Java SE 9的標準API已經劃分為各個模組 • 你在查詢API文件、使用其他運用了模組的程 式庫時,總是會面對模組相關訊息 50
51.
JVM(java)與module-path • 模組平臺系統要知道的第一件事是,它跟 Java程式語言本身沒有關係 • 是為了管理程式庫本身的功能封裝、程式庫 之間的相依性等需求而存在 51
52.
• 請複製範例檔中labs/CH02資料夾中的Hello2 資料夾至C:workspace 52
53.
• 第一件事是決定模組名稱,這邊假設模組名 稱為cc.openhome • 建議建立一個與模組名稱相同的資料夾,然 後其中依套件設定的階層放入原始碼 53
54.
• 在cc.openhome資料夾中建立一個module- info.java 54
55.
• 雖然module-info.java的副檔名為.java,它實 際上只是個設定檔 • 其中的module關鍵字僅在這個設定檔中進行 設定之用,不是Java程式語言的一部份 •
副檔名為.java,單純只是為了相容性,讓 javac等工具程式易於處理這個設定檔 55
56.
• 目前只能存取同一模組中的API,並且依賴 在Java標準API的java.base模組 • java.base模組包含且exports了 java.lang等常用套件 •
可以在module-info.java中設定自己的模組可 以公開哪些API,或者是依賴在哪個模組之 上。 56
57.
57
58.
編譯器(javac)與module- path • 製範例檔中labs/CH02的Hello3資料夾至 C:workspace 58
59.
59
60.
編譯器(javac)與module- source-path 60
61.
• 可以暫時將--module-path與--module- source-path想像成-classpath與- sourcepath的對應物 61
62.
IDE專案管理基礎 62
63.
IDE專案管理基礎 63
64.
IDE專案管理基礎 64
65.
65
66.
66
67.
使用了哪個JRE? • 因為各種原因,你的電腦中可能不只存在一 套JRE! • 在文字模式下鍵入java指令,如果設定了 PATH,會執行PATH
順序下找到的 第一個java可執行檔,這個可執行檔所啟動 的是哪套JRE? 67
68.
使用了哪個JRE? • 在執行java指令時,可附帶一個-version 引數,這可以顯示執行的JRE版本 68
69.
使用了哪個JRE? • 如果有個需求是切換JRE,文字模式下必須 設定PATH順序中,找到的第一個JRE之 bin資 料夾是你想要的JRE,而不是設定 CLASSPATH •
如果使用IDE新增專案,你使用了哪個JRE呢? 69
70.
類別檔案版本 • 如果使用新版本JDK編譯出位元碼檔案,在 舊版本JRE上執行,可能發生以下錯誤訊息… 70
71.
類別檔案版本 • 編譯器會在位元碼檔案中標示主版本號與次 版本號,不同的版本號,位元碼檔案格式可 能有所不同 • JVM在載入位元碼檔案後,會確認其版本號 是否在可接受的範圍,否則就不會處理該位 元碼檔案 71
72.
類別檔案版本 • 可以使用JDK工具程式javap,確認位元碼 檔案的版本號: 72
73.
類別檔案版本 • System.getProperty(“java.class.v ersion”)可取得JRE支援的位元碼版本號 • System.getProperty(“java.runtime .version”)可取得JRE版本訊息 73
74.
類別檔案版本 • 在編譯的時候,可以使用-target指定編譯 出來的位元碼,必須符合指定平台允許的版 本號 • 使用-source要求編譯器檢查使用的語法, 不超過指定的版本 74
75.
類別檔案版本 75
76.
類別檔案版本 • 在不指定-target與-source的情況下,編 譯器會有預設的-target值 • JDK9預設的-target與-source都是1.9 •
-target在指定時,值必須大於或等於- source 76
77.
類別檔案版本 • 如果只指定-source與-target進行編譯,會出現 警示訊息,這是因為編譯時預設的Bootstrap類別載 入器(Class loader)沒有改變 •
系統預設的類別載入器仍參考至1.9的相關類別 • 如果引用到一些舊版JRE沒有的新API,就會造成在 舊版JRE上無法執行 • 最好是編譯時指定-bootclasspath,參考至舊版 的rt.jar,這樣在舊版JRE執行時比較不會發生問題 77
78.
• JDK9中使用javac時,可以使用-- release引數一次指定指定-source、- target與-bootclasspath 78
79.
類別檔案版本 • 那麼在IDE中如何設定-source與-target 對應的選項呢?以 NetBeans
為例… 79