一、JDK的安裝
1矫钓、Java-Package choose
上述文檔翻譯:
-
JDK:針對Java開發(fā)者(Java developers)尖啡。包括了一個完整的JRE附加包工具项玛,該專用JRE附加包的目的是提供開發(fā)荞估,調(diào)試和模擬Java應(yīng)用程序咳促。
JDK:Java SE Development Kit,Java開發(fā)環(huán)境勘伺。
Server JRE:針對的是在服務(wù)器上運行Java應(yīng)用程序的管理員跪腹。用于在服務(wù)器上部署Java應(yīng)用。包括了在服務(wù)器應(yīng)用上所需要的JVM監(jiān)控和公共工具飞醉,但是不包括瀏覽器集成(Java 插件)冲茸、自動更新、安裝。
-
JRE:針對的是在一個桌面環(huán)境上運行Java的最終用戶轴术。覆蓋了大多數(shù)的最終用戶的需求难衰,包含了在系統(tǒng)上運行Java程序所需要的一切。
JRE:Java Runtime Enviroment逗栽,Java運行環(huán)境盖袭。
2、3種安裝包解壓后的目錄結(jié)構(gòu)及說明
-
JDK目錄結(jié)構(gòu)
- java_dir | - jdk1.8.0 | - bin | - lib | - db | - src.zip | - jre // 專用JRE | - bin | - lib | ... | - jre1.8.0 // 公共JRE | - bin | - lib
針對
/java_dir/jdk/
目錄進行說明:- bin:存放開發(fā)工具的可執(zhí)行文件祭陷。
- java苍凛,解釋器
- javac趣席,編譯器
- javadoc兵志,文檔工具,把API注釋提取成HTML文檔
- jar宣肚,歸檔工具想罕,把包結(jié)構(gòu)打包成.jar文件
- lib:開發(fā)工具所需要的類庫。
- dt.jar
- tools.jar
- db:純Java開發(fā)的數(shù)據(jù)可 Derby霉涨,是一個開源的100%Java開發(fā)的關(guān)系數(shù)據(jù)庫
- src.zip:所有java核心庫的源代碼
- jre:java運行環(huán)境 - JVM
- bin:存放JVM的執(zhí)行命令按价。
- java,解釋器
- lib:JVM運行所需要的核心類庫笙瑟。
- rt.jar楼镐,引導(dǎo)類。(IDE中API的所在包)
/java_dir/jre
目錄和java_dir/jdk/jre
目錄的內(nèi)容是一樣的往枷,都是用來運行Java程序的框产,即JVM。
-
Server-JRE目錄結(jié)構(gòu)
- 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的結(jié)構(gòu)辨析
圖示說明:
Java概念圖將Java組件技術(shù)分級分類秉宿。
- JDK所包含的組件:
- Java語言
- 工具和工具API
- 部署
- 用戶界面工具包
- 集成庫
- 其他基礎(chǔ)庫
- Lang和Util基礎(chǔ)庫
- Java虛擬機
- JRE所包含的組件:
- 部署
- 用戶界面工具包
- 集成庫
- 其他基礎(chǔ)庫
- Lang和Util基礎(chǔ)庫
- Java虛擬機
- Java SE API 所包含的內(nèi)容:
- 用戶界面工具包
- 集成庫
- 其他基礎(chǔ)庫
- Lang和Util基礎(chǔ)庫
**分析: **
官方文檔中,可知JDK與JRE相比屯碴,獨有的部分是Java Language和Tools描睦、Tools API。也就是說导而,JRE不具備Java應(yīng)用程序開發(fā)的功能忱叭。
JDK = Server-JRE + JRE 。
- 對于最終用戶:只需要Java運行環(huán)境來運行其電腦上的java程序今艺;因此韵丑,只安裝JRE就可以了。
- 對于服務(wù)器:需要編譯洼滚、運行Java應(yīng)用埂息,而不需要訪問Java應(yīng)用;因此,只使用Server-JRE進行編譯千康、解釋享幽。
- 對于Java開發(fā)者:開發(fā)Java程序時要編譯、解釋拾弃,同時作為用戶要運行其他Java應(yīng)用值桩;因此使用JDK。
- 平常所說的Java自動更新豪椿,是指公共JRE的更新奔坟,以便適應(yīng)網(wǎng)站的技術(shù)更新;而不是JDK的自動更新搭盾。
javac和java命令:
在jdk/bin
目錄下有javac和java命令(編譯咳秉、解釋);而在jdk/jre/bin
或jre/bin
目錄下只有java命令(解釋)鸯隅。
二澜建、環(huán)境變量(Enviroment variable)的設(shè)置及作用
環(huán)境變量: 分為用戶變量和系統(tǒng)變量。
1蝌以、用戶變量(user variable)
只對當前用戶有效(windows下作用不大炕舵,linux下用處大),是為了減低自己所做的修改對他人造成的影響跟畅。
一般系統(tǒng)變量的路徑排在用戶變量之前咽筋,如果雙方都有的路徑,會使用系統(tǒng)變量中的值徊件。
2奸攻、系統(tǒng)變量(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文件的所在路徑,就是執(zhí)行javac
命令時:要查找的類的位置和相關(guān)的類庫位置崔兴。
已經(jīng)不需要新建CLASSPATH路徑了U玫肌;壮帷!:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
手工編譯.java文件的幾種情況:
假設(shè)
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命令能執(zhí)行?
因為在PAHT路徑中配置的
%JAVA_HOME%\bin
路徑幫助我們找到了該目錄下的javac.exe
執(zhí)行命令棠众。
CLASSPATH路徑的作用?
以下內(nèi)容來自《Java編程思想》有决。
1闸拿、Java 解釋器的工作程序如下:
首先,java.exe找到環(huán)境變量CLASSPATH书幕。
CLASSPATH 包含了一個或多個目錄新荤,它們作為一種特殊的“根”使用,從這里展開對.class 文件的搜索台汇。
從那個根開始苛骨,解釋器會尋找包名篱瞎,并將每個點號(句點)替換成一個斜杠,從而生成從CLASSPATH 根開始的一個路徑名(所以package foo.bar.baz 會變成foo\bar\baz 或者foo/bar/baz痒芝;具體是正斜杠還是反斜杠由操作系統(tǒng)決定)奔缠。
隨后將它們連接到一起,成為CLASSPATH 內(nèi)的各個條目(入口)吼野。
以后搜索.class 文件時校哎,就可從這些地方開始查找與準備創(chuàng)建的類名對應(yīng)的名字。
此外瞳步,它也會搜索一些標準目錄——這些目錄與Java 解釋器駐留的地方有關(guān)闷哆。
2、CLASSPATH是Java編譯器(javac.exe)的一個環(huán)境變量单起。
它的作用是指定類搜索路徑抱怔,它與import、package關(guān)鍵字有關(guān)嘀倒。
當你寫下
improt java.util.*
時屈留,編譯器面對import關(guān)鍵字時,就知道你要引入java.util這個package中的所有類测蘑。但是編譯器如何知道你把這個package放在哪里了呢灌危?
所以你首先得告訴編譯器這個package的所在位置。如何告訴它呢碳胳?就是設(shè)置CLASSPATH啦~
如果java.util這個package在c:\jdk\ 目錄下勇蝙,你得把c:\jdk\這個路徑設(shè)置到CLASSPATH中去!當編譯器面對
import java.util.*
這個語句時挨约,它先會查找CLASSPATH所指定的目錄味混,并檢視子目錄java\util是否存在,然后找出名稱吻合的已編譯文件(.class文件)诫惭。如果沒有找到就會報錯翁锡!
當你自己開發(fā)一個package時,如果想要用這個package中的類夕土;自然馆衔,你也得把這個package所在的目錄設(shè)置到CLASSPATH中去!
然而隘弊,使用JAR 文件時要注意一個問題:必須將JAR文件的名字置于類路徑里哈踱,而不僅僅是它所在的路徑。所以對一個名為grape.jar 的JAR 文件來說梨熙,我們的類路徑需要包括:
CLASSPATH=.;D:\JAVA\LIB;C:\flavors\grape.jar
CLASSPATH的設(shè)定开镣,對JAVA的初學(xué)者而言是一件棘手的事。所以Sun讓JAVA2的JDK更聰明一些咽扇。你會發(fā)現(xiàn)邪财,在你安裝之后陕壹,即使完全沒有設(shè)定CLASSPATH,你仍然能夠編譯基本的JAVA程序树埠,并且加以執(zhí)行糠馆。
可以看出,CLASSPATH 里將會包含大量備用的搜索路徑怎憋。
但是又碌,在JDK 1.5之后,就沒有必要配置CLASSPATH了:
因為1.5版本以上JDK:
- 1绊袋、它會自動搜索當前路徑下的類文件
- 2毕匀、而且使用Java的編譯和運行工具時,系統(tǒng)可以自動加載dt.jar(是關(guān)于運行環(huán)境的類庫,主要是swing的包)和tools.jar(是關(guān)于一些工具的類庫)文件中的Java類
詳見: JDK官方安裝癌别、配置說明
3皂岔、PATH變量
**path變量的作用: **
windows系統(tǒng)根據(jù)環(huán)境變量中的PATH變量查找命令并執(zhí)行,如果找不到則出現(xiàn)“XXX不是內(nèi)部或外部命令展姐,也不是可運行的程序或批處理文件”錯誤躁垛。
path變量名不分大小寫,應(yīng)用程序或DOS界面會遍歷path的路徑來查找命令并調(diào)用圾笨。
path變量的應(yīng)用舉例:
path路徑的作用是為DOS命令(cmd)預(yù)設(shè)一大串的可供搜索命令來匹配 的目錄路徑教馆,比如在命令行想要調(diào)用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中直接就可以調(diào)用mysql -u root -p
來進行進行登錄了谍婉。
因為有對應(yīng)的PATH路徑存在,這條命令實際上找到了路徑下的mysql.exe來執(zhí)行我們的命令镀钓。
- 想在DOS中使用git:
git.exe的路徑為:
C:\Program Files\Git\cmd\git.exe
穗熬。我們在PATH中添加的路徑值為
C:\Program Files\Git\cmd
,同理丁溅,我們可以使用git
命令來執(zhí)行唤蔗。
舉一反三 :
- 在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就是路徑了涯穷,是在開發(fā)中調(diào)用相關(guān)命令如 javac
和java
的所在位置棍掐。
作用: 是在任何目錄下都能調(diào)用與java開發(fā)相關(guān)的命令。
追加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]
注意: 現(xiàn)在已經(jīng)不需要配置CLASSPATH路徑了。
5鹰服、MS-DOS下手動編譯病瞳、執(zhí)行java文件
Dos界面: 就是windows下的MS-DOS
方式,cmd是command的縮寫悲酷∪栽矗可以執(zhí)行一些命令。
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]);
}
}
}
作用:打印傳入的每個參數(shù)笼踩。
String[] args
的作用是:在Docs界面,把執(zhí)行.class 文件時附帶傳進的所有參數(shù)(以空格隔開)分別存入args這個字符數(shù)組中亡嫌;之后可以使用args這個數(shù)組中的參數(shù)嚎于。
2、在Dos界面
- 進入.java文件所在目錄挟冠。
-
javac
命令編譯Print.java
文件于购,得到Print.class
文件。 -
java
命令執(zhí)行.class文件知染,并傳入4個參數(shù) - 輸出java程序運行結(jié)果
3肋僧、JDK的環(huán)境變量總結(jié)
在windows下:
-
對于JDK:其實只需要設(shè)置PATH路徑即可,把
xx/jdk/bin
目錄追加進去控淡。其專用JRE(
xx/jdk/jre
)可以自動被xx/jdk/bin/
中的命令調(diào)用嫌吠。其公共JRE(
xx/jre
)自動被注冊到系統(tǒng)的注冊表當中,供其他應(yīng)用程序調(diào)用掺炭。 -
對于JRE:不需要設(shè)置PATH路徑辫诅,直接使用即可。
因為JRE在安裝時就自動被注冊到系統(tǒng)的注冊表當中了涧狮。
因此炕矮,公共JRE會被自動注冊到系統(tǒng)的注冊表之中,無需配置者冤。
查看系統(tǒng)注冊表:
- 1肤视、Win + R,輸入regedit涉枫。
- 2邢滑、在
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]
下有Java相關(guān)的注冊表記錄。
小結(jié)論:
-
不管是在windows下還是linux下拜银,配置PATH變量的目的殊鞭,都是為了在DOS界面/CMD界面可以直接調(diào)用
xx/jdk/bin
目錄中的java命令遭垛,也就是為了在java編程時使用IDEA等工具能正確編譯、執(zhí)行java程序操灿。所以PATH變量的目的是用于java開發(fā)锯仪。
當需要運行Tomcat服務(wù)器時,由于Tomcat需要JRE環(huán)境趾盐,所以它根據(jù)系統(tǒng)的環(huán)境變量來尋找JRE的位置庶喜。詳見Tomcat官方安裝、配置說明
- 安裝JDK的情況下救鲤,設(shè)置
JAVA_HOME
即可久窟,Tomcat使用JAVA_HOME/jre
的JRE環(huán)境”静或者設(shè)置JRE_HOME
來指定公共JRE的位置斥扛。 - 只安裝JRE的情況下,設(shè)置
JRE_HOME
為JRE所在目錄即可丹锹。
- 安裝JDK的情況下救鲤,設(shè)置
三稀颁、Linux下JDK環(huán)境變量的設(shè)置
一般來說,我們解壓JDK的tar包的位置可能有:
-
/usr/local/
目錄楣黍,這里存放用戶的應(yīng)用程序和文件匾灶,類似windows的program files
目錄。 -
/opt/
目錄租漂,這是給主機額外安裝軟件的目錄阶女。
假設(shè)現(xiàn)在的JDK路徑為:
/opt/java8/jdk1.8.0
目錄。
環(huán)境變量的配置:
1哩治、所有用戶的shell都有權(quán)訪問的環(huán)境變量秃踩,這種做法在多人情況下可能帶來安全性問題。
1锚扎、打開配置文件:vim /etc/profile
吞瞪。
2、輸入如下內(nèi)容:
export JAVA_HOME=/opt/java8/jdk1.8.0 # Tomcat運行需要JRE環(huán)境
export PATH=$JAVA_HOME/bin:$PATH # 開發(fā)java時需要
# export是把變量導(dǎo)出為全局變量
3驾孔、讀取、執(zhí)行配置文件:source /etc/profile
惯疙。
4翠勉、查看JDK安裝:java -version
。
2霉颠、用戶級別的環(huán)境變量的控制对碌,也是最靠譜的方法。
如果需要給某個用戶權(quán)限使用這些環(huán)境變量蒿偎,只需要修改其個人用戶家目錄下的.bash_profile
文件就可以了朽们。
1怀读、打開用戶家目錄下的.bash_profile
文件:vim .bash_profile
。
2骑脱、輸入以下內(nèi)容:
# 同上一致
3菜枷、重新登錄
JDK的卸載:
進入JDK的安裝目錄的
_uninst
目錄,在shell終端執(zhí)行命令:./uninstall.sh
即可叁丧。