JDK環境解析,安裝和目的
1. JDK環境解析
本篇將會介紹JDK的構成以及各部分的功能。
JDK = JRE + 開發工具。
JRE = JVM + 類庫。
1.1 JVM
Java Virtual Machine (Java 虛擬機), 是一個虛構出來的電腦,能模擬電腦功能。
JVM屏蔽了具體作業系統平台的資訊,
這就是Java的能夠「一次編譯,到處運行」的原因。
JVM 將位元組碼解析為機器碼。
1.2 JRE
Java Runtime Environment java 運行時環境,主要包括JVM和Java程式所需的核心類庫lib等。
JRE = JVM + 類庫。
在JDK的安裝目錄里可以找到JRE目錄,裡面有兩個文件夾bin和lib。
bin: binary 二進位文件,
存放的是調試後可運行的文件。
lib: library 類庫,
存放需要引用的類庫 即 jar包。
因為在解釋.class文件的時候 JVM 需調用類庫 lib (JRE里有運行.class文件的java.exe),所以光有JVM不能執行.class文件。
可以認為,
bin里的是JVM。
lib里的是JVM工作所需要的類庫。
JVM和 lib和起來就稱為JRE。
可以理解成虛擬機平台+虛擬機本體(JVM)的關係。
JRE給普通用戶提供了運行java文件的環境。
1.3 JDK
Java Development Kit java 開發工具,包括了JRE, Java開發工具(如編譯器和調試器)和Java基礎的類庫。
JDK = JRE + 開發工具。
在JDK安裝目錄下面有六個文件夾、一些聲明文件、一個src.zip壓縮文件。主要是bin、include、lib、 jre這四個文件夾起作用。
bin: 存放各種工具命令(如: 編譯器 javac.exe)。
include: java和JVM交互用的頭文件
lib: JDK工具命令的實際執行程式 (最終調用)
jre: JRE (java運行環境)
db: 安裝JavaDB的路徑
demo: 存放JDK提供的演示程式碼
sample: JDK提供的一些簡單示例程式碼
src.zip: Java所有核心類庫的源程式碼
總的來說JDK是用於java程式的開發, 而JRE則是只能運行.class文件而沒有編譯的功能。
常見使用流程:
我們利用 JDK (調用 Java API 開發工具)編寫出 Java 源程式碼,存儲於 .java 文件中。
JDK 中的編譯器 javac 將 Java 源程式碼編譯成 Java 位元組碼,存儲於 .class 文件中。
JRE 載入、驗證、執行 Java 位元組碼。
JVM 將位元組碼解析為機器碼並映射到 CPU 指令集或 OS 的系統調用。
強調:
JDK有 javac.exe , JRE沒有。
(javac指令是用來將java文件編譯成class文件的,這是開發者需要的, 而用戶是不需要的。)
JDK是開發環境,JRE是運行環境。
JVM 本身不能執行 .class 文件,需要 JRE 下的 lib 類庫的支援。
2. JDK安裝
2.1 為什麼使用JDK8
2.1.1 更新
- Oracle平均每隔6個月就發布一個新版本,導致很多人對上個版本都沒精通,下個版本就已經發布了。
2.1.2 穩定
- 軟體需要的就是穩定,對於不是人人都使用最新版的情況。大環境傾向於使用JDK8。(新版本可以兼容舊版本,而舊版本不能運行新版本)
- 新版本不穩定,對於出現的每一個小bug都會消耗很多精力去解決。
- 對於已完成的項目軟體來說,更新極有可能導致很多未知的運行時錯誤和編譯器錯誤。
2.1.3 需求
- JDK8使用時間已久,大大小小的特性,bug 都摸清楚了,用起來更方便。
- 如果出現了一些不可修復問題,而如果能夠回退版本就能解決的話,那麼很多時候的選擇是回退版本。
- JDK8完全可以滿足需要,新版本沒有改革性的更新 (沒有改變版本的核心動力)。
以下摘抄自知乎
//zhuanlan.zhihu.com/p/139274956
在Java8之前,用戶接受更高版本的Java的過程非常緩慢,想要跟上每六個月就要升級的步伐,實在是太難了。
對於企業來說,這種升級分分鐘會帶來兼容性的致命問題,風險也是非常大的,尤其面對龐大而又複雜項目。
而且JDK是個非常核心的基礎設施,除了安全漏洞,基本上是不會再去動生產環境JDK了,而且出了安全事故誰也承擔不了這個責任。
在這麼多的版本中,只有Java8、Java11和未來的Java17是長期支援版本(LTS),Oracle會支援3年,其他的只會支援6個月,新版本一出,就放棄老版本的技術支援,這也是很少有人使用9~14的版本的原因。
那程式設計師們還有必要學習Java的新版本嗎?
我認為是有必要的。
從技術來看:Java小版本更新基本上都是修復各種漏洞和bug,不會去改變現有的JDK,JDK其實都差不多,我們只需要知道它新增了什麼功能而已,從這一點來看其實也增加不了很多的學習成本。
當Java大版本的更新,比如JDK7->JDK8,會增加一些新特性,花幾個小時看看realse
note就可以完成學習了,同樣花不了程式設計師們的很多時間。
從個人來看:雖然很多公司還在用JDK6-7-8,但是我們更應該關注的是自身的知識基礎和學習能力,不要因為現在公司的Java技術停留在某個版本上面而放棄學習,我們可以不為企業更新Java版本,但我們要為自己的知識深度與廣度學習更多的Java知識。
如果你只會Java1.7,那麼你的求職範圍只能在使用Java1.7的公司中,一個用得上Java8、11、12的公司為什麼要招一個連Java8都不會的人呢?
除了留意版本更新,程式設計師們同時要留意基於Java的一些流行框架和新技術,比如近幾年興起的SpringBoot、SpringCloud等。
一句話就可以概括:企業升不升級是他的事,你學不學是你的事。
2.2 安裝JDK
本篇提供官網渠道和網盤下載。各位按照自己需求自行選擇。
2.2.1. 官網下載
下載是要帳號的,如果沒有的話可以註冊一個。
下載的時候會有提示。
首頁: //www.oracle.com/index.html
選擇JDK版本的介面:
//www.oracle.com/java/technologies/javase-downloads.html
當前看到的是JDK15,把介面往下翻,
一直翻到JDK8 ,選擇JDK下載。
這裡選自己需要的版本。我下的是 windows-x64。
同意彈出的提示後下載。
2.2.2. 網盤下載
鏈接://pan.baidu.com/s/1LgFhwr0-ur_sZEJZCrLh-Q
提取碼:m6bg
安裝JDK的時候根據提示進行下一步就好了,安裝位置建議放在C盤以外的地址。
3. java環境配置
3.1 配置環境變數
3.1.1 配置JAVA_HOME
右擊此電腦/我的電腦->屬性->高級->環境變數->系統變數->新建
變數名: JAVA_HOME
變數值: JDK的安裝地址
輸入完成之後點確認
3.1.2. 配置PATH
找到path,雙擊或者點編輯->新建
輸入: %JAVA_HOME%\bin
點確定保存。
3.1.3 配置CLASSPATH
這一步了解就好,原因在後面會講到。
變數名: CLASSPATH
變數值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
點確定保存變數
3.2. 測試環境變數
快捷鍵 「win + R」 -> 輸入cmd -> 確定
在命令窗口輸入: java -version
-> 按回車
配置成功。
3.3 編寫第一個java程式
創建一個後綴為.java的文件(盡量在純英文文件夾下),
如果不會的話可以 查看->勾上文件拓展名
新建文本文檔 -> 右鍵重命名
有提示直接確認就可以了。
創建成功。
在裡面寫入測試程式碼。
public class Test{ //class後面的單詞要與文件名保持一致
public static void main(String args[]){
System.out.println("Hello world!");
} }
保存。
再次打開命令窗口(「 win + R 」 -> 輸入cmd -> 確定)。
在命令窗口輸入 D: //文件所在的硬碟位置
->回車
在命令窗口輸入: cd+空格+文件位置
不知道 .java 文件的地址,可以直接點文件管理器上方的文件夾圖標即可顯示路徑
然後複製
在命令窗口輸入:cd D:\dd\test //文件位置
->回車
在命令窗口輸入:javac Test.java //編譯文件
->回車
執行成功之後, 在相同的目錄下會有一個Test.class文件,
這是編譯之後給電腦看的文件。
在命令窗口輸入: java HelloWorld
->回車
命令窗口會列印/顯示: Hello World!
編碼完成。
4. 配置環境變數的目的
配置環境變數的目的很簡單:為了在命令行窗口(dos)下編譯和運行Java程式。
由於java開發命令不屬於Windows本身命令,所以需要進行路徑配置才可以使用。
4.1 配置JAVA_HOME環境變數目的
JAVA_HOME環境變數指向 JDK 的安裝目錄。
-
方便引用->把路徑配置在 JAVA_HOME 里,PATH 可以直接引用 %JAVA_HOME% 。
-
歸一原則->當JDK路徑發生改變時, 僅需更改JAVA_HOME的變數值。
-
約定協議->一些常用的 java開發軟體 (比如Eclipse) 都是默認通過搜索 JAVA_HOME 變數來找到並使用JDK的。
4.2 配置PATH環境變數目的
現在知道了.java 文件需要先轉換成 .class 文件才能被電腦識別,
也就是 源文件 -> 二進位位元組碼,
而我們在命令窗口用到的java命令,如
javac 把.java文件編譯成.class文件。
java 運行.class文件。
- 這些命令都是通過我們配置的PATH環境變數找到相應的 (bin文件夾中)
java.exe和javac.exe文件,電腦才能正確識別並執行我們輸入的java命令。
配置完成之後,作業系統就可以調用 javac.exe 和 bin 文件夾下其它的可執行文件,包括執行Java程式的java.exe。
path是Windows查找.exe文件的路徑
4.3 配置CLASSPATH環境變數目的
在java開發過程中,我們會用到很多自帶的標準類庫,所以告訴電腦如何找到它們是必須的。
將Java源程式編譯成.class文件之後,才可以執行Java程式。
而執行Java程式需要讓虛擬機(JVM)知道.class文件的位置並導到記憶體
- JVM就是通過CLASSPATH來尋找類的。
變數的值: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
「.」 當前目錄
dt.jar 運行環境的類庫
tools.jar 工具類庫
沒有以上兩個類庫的支援,很多Java程式就無法運行。
啟動jvm的時候,jvm會根據classpath環境變數所保存的路徑資訊下去尋找對應的class文件。而自JDK1.5以後,JRE能自動搜索目錄下類文件,並且載入dt.jar和tool.jar的類。
CLASSPATH 是jvm查找.class文件的路徑。
現在,很多IDE(集成開發環境)不需要配置環境變數,也能正確編譯和運行Java程式。
我們只需要在IDE (如: IDEA) 當中相關的配置菜單下,正確的指定出JDK的安裝路徑就可以了。
總結:
JAVA_HOME 配置提供JDK的按照目錄。
PATH 配置提供的是java的編譯環境。
CLASSPATH 配置提供的是java的運行環境。
有什麼建議都歡迎發到評論區討論,每一條留言我都會看的。
參考資料: