一、JDK的安裝
1、Java-Package choose
上述文檔翻譯:
-
JDK:針對Java開發者(Java developers)。包括了一個完整的JRE附加包工具,該專用JRE附加包的目的是提供開發,調試和模擬Java應用程序。
JDK:Java SE Development Kit,Java開發環境。
Server JRE:針對的是在服務器上運行Java應用程序的管理員。用于在服務器上部署Java應用。包括了在服務器應用上所需要的JVM監控和公共工具,但是不包括瀏覽器集成(Java 插件)、自動更新、安裝。
-
JRE:針對的是在一個桌面環境上運行Java的最終用戶。覆蓋了大多數的最終用戶的需求,包含了在系統上運行Java程序所需要的一切。
JRE:Java Runtime Enviroment,Java運行環境。
2、3種安裝包解壓后的目錄結構及說明
詳見: JDK和JRE目錄結構
-
JDK目錄結構
- java_dir | - jdk1.8.0 | - bin | - lib | - db | - src.zip | - jre // 專用JRE | - bin | - lib | ... | - jre1.8.0 // 公共JRE | - bin | - lib
針對
/java_dir/jdk/
目錄進行說明:- bin:存放開發工具的可執行文件。
- java,解釋器
- javac,編譯器
- javadoc,文檔工具,把API注釋提取成HTML文檔
- jar,歸檔工具,把包結構打包成.jar文件
- lib:開發工具所需要的類庫。
- dt.jar
- tools.jar
- db:純Java開發的數據可 Derby,是一個開源的100%Java開發的關系數據庫
- src.zip:所有java核心庫的源代碼
- jre:java運行環境 - JVM
- bin:存放JVM的執行命令。
- java,解釋器
- lib:JVM運行所需要的核心類庫。
- rt.jar,引導類。(IDE中API的所在包)
/java_dir/jre
目錄和java_dir/jdk/jre
目錄的內容是一樣的,都是用來運行Java程序的,即JVM。
-
Server-JRE目錄結構
- server-jre_dir | - jdk1.8.0 | - bin | - lib | - db | - src.zip | - jre // 專用JRE | - bin | - lib | ...
?
-
JRE文件樹
- jre_dir | -jre1.8.0 // 公共JRE | - bin | - lib
?
3、JDK和JRE的結構辨析
圖示說明:
Java概念圖將Java組件技術分級分類。
- JDK所包含的組件:
- Java語言
- 工具和工具API
- 部署
- 用戶界面工具包
- 集成庫
- 其他基礎庫
- Lang和Util基礎庫
- Java虛擬機
- JRE所包含的組件:
- 部署
- 用戶界面工具包
- 集成庫
- 其他基礎庫
- Lang和Util基礎庫
- Java虛擬機
- Java SE API 所包含的內容:
- 用戶界面工具包
- 集成庫
- 其他基礎庫
- Lang和Util基礎庫
**分析: **
官方文檔中,可知JDK與JRE相比,獨有的部分是Java Language和Tools、Tools API。也就是說,JRE不具備Java應用程序開發的功能。
JDK = Server-JRE + JRE 。
- 對于最終用戶:只需要Java運行環境來運行其電腦上的java程序;因此,只安裝JRE就可以了。
- 對于服務器:需要編譯、運行Java應用,而不需要訪問Java應用;因此,只使用Server-JRE進行編譯、解釋。
- 對于Java開發者:開發Java程序時要編譯、解釋,同時作為用戶要運行其他Java應用;因此使用JDK。
- 平常所說的Java自動更新,是指公共JRE的更新,以便適應網站的技術更新;而不是JDK的自動更新。
javac和java命令:
在jdk/bin
目錄下有javac和java命令(編譯、解釋);而在jdk/jre/bin
或jre/bin
目錄下只有java命令(解釋)。
二、環境變量(Enviroment variable)的設置及作用
環境變量: 分為用戶變量和系統變量。
1、用戶變量(user variable)
只對當前用戶有效(windows下作用不大,linux下用處大),是為了減低自己所做的修改對他人造成的影響。
一般系統變量的路徑排在用戶變量之前,如果雙方都有的路徑,會使用系統變量中的值。
2、系統變量(System variable)
1、JAVA_HOME變量(約定名稱,供JDK、其他軟件使用)
顧名思義: 這是Java的家,就是JDK文件夾的所在位置(安裝路徑)。
新建JAVA_HOME路徑:C:\Program Files\Java\jdk1.8.0_131
作用: 指向JDK的安裝目錄:
- 1、像eclipse/intellij等軟件可以借助該變量自動定位JDK
- 2、tomcat等軟件只認定這個變量來定位JDK
- 3、使用變量,修改JDK位置更加靈活(CLASSPATH、PATH的引用)
2、CLASSPATH變量(約定名稱,專為JDK而使用)
顧名思義: 這是要查找的類/class文件的所在路徑,就是執行javac
命令時:要查找的類的位置和相關的類庫位置。
已經不需要新建CLASSPATH路徑了!!!:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
手工編譯.java文件的幾種情況:
假設
C:\User\14002\Desktop\Print.java
是我們要編譯的java源文件。
情況一:Print.java只是繼承于Object類,且不需要引入外部.jar文件。
-
1、絕對路徑編譯:
打開DOS,處于任意路徑下,輸入:
javac C:\User\14002\Desktop\Print.java
即可完成編譯。 -
2、相對路徑編譯:
進入ODS,進入該文件所在目錄后,輸入:
javac Print.java
即可。
情況二:Print.java繼承其他類,或者要引入其他.jar文件。但是都在同一個目錄下。
- 編譯方式和情況一相同。
情況三:Print.java繼承某個父類,如MyObject.java類。或者引用某個.jar文件,如MyJar.jar。但是都不在同一個目錄下。
-
1、MyObject.class不在當前目錄中(
C:\test\MyObject.class
),需要手動指定該class文件所在目錄:javac -classpath C:\test\ C:\User\14002\Desktop\Print.java
。 -
2、MyJar.jar不在當前目錄中(
C:\test\MyJar.jar
),需要指定位置:javac -classpath C:\test\MyJar.jar C:\User\14002\Desktop\Print.java
。
為什么javac命令能執行?
因為在PAHT路徑中配置的
%JAVA_HOME%\bin
路徑幫助我們找到了該目錄下的javac.exe
執行命令。
CLASSPATH路徑的作用?
以下內容來自《Java編程思想》。
1、Java 解釋器的工作程序如下:
首先,java.exe找到環境變量CLASSPATH。
CLASSPATH 包含了一個或多個目錄,它們作為一種特殊的“根”使用,從這里展開對.class 文件的搜索。
從那個根開始,解釋器會尋找包名,并將每個點號(句點)替換成一個斜杠,從而生成從CLASSPATH 根開始的一個路徑名(所以package foo.bar.baz 會變成foo\bar\baz 或者foo/bar/baz;具體是正斜杠還是反斜杠由操作系統決定)。
隨后將它們連接到一起,成為CLASSPATH 內的各個條目(入口)。
以后搜索.class 文件時,就可從這些地方開始查找與準備創建的類名對應的名字。
此外,它也會搜索一些標準目錄——這些目錄與Java 解釋器駐留的地方有關。
2、CLASSPATH是Java編譯器(javac.exe)的一個環境變量。
它的作用是指定類搜索路徑,它與import、package關鍵字有關。
當你寫下
improt java.util.*
時,編譯器面對import關鍵字時,就知道你要引入java.util這個package中的所有類。但是編譯器如何知道你把這個package放在哪里了呢?
所以你首先得告訴編譯器這個package的所在位置。如何告訴它呢?就是設置CLASSPATH啦~
如果java.util這個package在c:\jdk\ 目錄下,你得把c:\jdk\這個路徑設置到CLASSPATH中去!當編譯器面對
import java.util.*
這個語句時,它先會查找CLASSPATH所指定的目錄,并檢視子目錄java\util是否存在,然后找出名稱吻合的已編譯文件(.class文件)。如果沒有找到就會報錯!
當你自己開發一個package時,如果想要用這個package中的類;自然,你也得把這個package所在的目錄設置到CLASSPATH中去!
然而,使用JAR 文件時要注意一個問題:必須將JAR文件的名字置于類路徑里,而不僅僅是它所在的路徑。所以對一個名為grape.jar 的JAR 文件來說,我們的類路徑需要包括:
CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar
CLASSPATH的設定,對JAVA的初學者而言是一件棘手的事。所以Sun讓JAVA2的JDK更聰明一些。你會發現,在你安裝之后,即使完全沒有設定CLASSPATH,你仍然能夠編譯基本的JAVA程序,并且加以執行。
可以看出,CLASSPATH 里將會包含大量備用的搜索路徑。
但是,在JDK 1.5之后,就沒有必要配置CLASSPATH了:
因為1.5版本以上JDK:
- 1、它會自動搜索當前路徑下的類文件
- 2、而且使用Java的編譯和運行工具時,系統可以自動加載dt.jar(是關于運行環境的類庫,主要是swing的包)和tools.jar(是關于一些工具的類庫)文件中的Java類
詳見: JDK官方安裝、配置說明
3、PATH變量
**path變量的作用: **
windows系統根據環境變量中的PATH變量查找命令并執行,如果找不到則出現“XXX不是內部或外部命令,也不是可運行的程序或批處理文件”錯誤。
path變量名不分大小寫,應用程序或DOS界面會遍歷path的路徑來查找命令并調用。
path變量的應用舉例:
path路徑的作用是為DOS命令(cmd)預設一大串的可供搜索命令來匹配 的目錄路徑,比如在命令行想要調用mysql來登錄操作或者是使用git。
- 想在DOS中使用mysql:
mysql.exe的路徑為:
C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql.exe
。我們在PATH中添加一段路徑
C:\Program Files\MySQL\MySQL Server 5.7\bin
;那么,我們在cmd中直接就可以調用mysql -u root -p
來進行進行登錄了。
因為有對應的PATH路徑存在,這條命令實際上找到了路徑下的mysql.exe來執行我們的命令。
- 想在DOS中使用git:
git.exe的路徑為:
C:\Program Files\Git\cmd\git.exe
。我們在PATH中添加的路徑值為
C:\Program Files\Git\cmd
,同理,我們可以使用git
命令來執行。
舉一反三 :
- 在DOS中啟動chrome:
你可以在用戶變量中的Path變量中加入chrome瀏覽器的路徑
C:\Program Files (x86)\Google\Chrome\Application
。那么你在cmd中輸入chrome,回車。即可啟動chrome瀏覽器。
因為chrome.exe的路徑是:C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
配置JDK需要的PATH路徑
顧名思義: path就是路徑了,是在開發中調用相關命令如 javac
和java
的所在位置。
作用: 是在任何目錄下都能調用與java開發相關的命令。
追加PATH路徑:%JAVA_HOME%\bin;
4、路徑配置圖解:
- jdk1.8.0 (1、JAVA_HOME)
| - bin (3、PATH)
| - jre
| - lib
| - dt.jar --> [2、CLASSPATH]
| - tools.jar --> [2、CLASSPATH] . --> [2、CLASSPATH]
注意: 現在已經不需要配置CLASSPATH路徑了。
5、MS-DOS下手動編譯、執行java文件
Dos界面: 就是windows下的MS-DOS
方式,cmd是command的縮寫。可以執行一些命令。
1、在.../user/desktop/
桌面上生成Print.java
文件:
public class Print {
public static void main(String[] args){
for (int i = 0; i < args.length; i++) {
System.out.println(args[i]);
}
}
}
作用:打印傳入的每個參數。
String[] args
的作用是:在Docs界面,把執行.class 文件時附帶傳進的所有參數(以空格隔開)分別存入args這個字符數組中;之后可以使用args這個數組中的參數。
2、在Dos界面
- 進入.java文件所在目錄。
-
javac
命令編譯Print.java
文件,得到Print.class
文件。 -
java
命令執行.class文件,并傳入4個參數 - 輸出java程序運行結果
3、JDK的環境變量總結
在windows下:
-
對于JDK:其實只需要設置PATH路徑即可,把
xx/jdk/bin
目錄追加進去。其專用JRE(
xx/jdk/jre
)可以自動被xx/jdk/bin/
中的命令調用。其公共JRE(
xx/jre
)自動被注冊到系統的注冊表當中,供其他應用程序調用。 -
對于JRE:不需要設置PATH路徑,直接使用即可。
因為JRE在安裝時就自動被注冊到系統的注冊表當中了。
因此,公共JRE會被自動注冊到系統的注冊表之中,無需配置。
查看系統注冊表:
- 1、Win + R,輸入regedit。
- 2、在
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]
下有Java相關的注冊表記錄。
小結論:
-
不管是在windows下還是linux下,配置PATH變量的目的,都是為了在DOS界面/CMD界面可以直接調用
xx/jdk/bin
目錄中的java命令,也就是為了在java編程時使用IDEA等工具能正確編譯、執行java程序。所以PATH變量的目的是用于java開發。
當需要運行Tomcat服務器時,由于Tomcat需要JRE環境,所以它根據系統的環境變量來尋找JRE的位置。詳見Tomcat官方安裝、配置說明
- 安裝JDK的情況下,設置
JAVA_HOME
即可,Tomcat使用JAVA_HOME/jre
的JRE環境。或者設置JRE_HOME
來指定公共JRE的位置。 - 只安裝JRE的情況下,設置
JRE_HOME
為JRE所在目錄即可。
- 安裝JDK的情況下,設置
三、Linux下JDK環境變量的設置
一般來說,我們解壓JDK的tar包的位置可能有:
-
/usr/local/
目錄,這里存放用戶的應用程序和文件,類似windows的program files
目錄。 -
/opt/
目錄,這是給主機額外安裝軟件的目錄。
假設現在的JDK路徑為:
/opt/java8/jdk1.8.0
目錄。
環境變量的配置:
1、所有用戶的shell都有權訪問的環境變量,這種做法在多人情況下可能帶來安全性問題。
1、打開配置文件:vim /etc/profile
。
2、輸入如下內容:
export JAVA_HOME=/opt/java8/jdk1.8.0 # Tomcat運行需要JRE環境
export PATH=$JAVA_HOME/bin:$PATH # 開發java時需要
# export是把變量導出為全局變量
3、讀取、執行配置文件:source /etc/profile
。
4、查看JDK安裝:java -version
。
2、用戶級別的環境變量的控制,也是最靠譜的方法。
如果需要給某個用戶權限使用這些環境變量,只需要修改其個人用戶家目錄下的.bash_profile
文件就可以了。
1、打開用戶家目錄下的.bash_profile
文件:vim .bash_profile
。
2、輸入以下內容:
# 同上一致
3、重新登錄
JDK的卸載:
進入JDK的安裝目錄的
_uninst
目錄,在shell終端執行命令:./uninstall.sh
即可。