Java补漏(一)
第一章前言
????????在學(xué)長(zhǎng)的建議下,為了彌補(bǔ)之前學(xué)Java漏下的或者不是非常清楚的知識(shí)點(diǎn),買(mǎi)了本蠻好的教科書(shū)-《Java學(xué)習(xí)筆記(JDK6)》,正式又一次學(xué)習(xí)。為了記下一些讓我恍然大悟的知識(shí)。寫(xiě)了本文檔。
第二章Java入門(mén)
2.1 JVM的認(rèn)識(shí)
????????說(shuō)究竟Java是一種計(jì)算機(jī)高級(jí)語(yǔ)言,一般高級(jí)語(yǔ)言假設(shè)須要在操作系統(tǒng)上執(zhí)行,那么它必須編譯成機(jī)器語(yǔ)言。比方C語(yǔ)言,它的編譯過(guò)程就是從C語(yǔ)言到匯編語(yǔ)言到機(jī)器語(yǔ)言。而Java的奇妙之處在于Java的編譯沒(méi)有直接變成機(jī)器語(yǔ)言,而是一種中間語(yǔ)言,那么中間語(yǔ)言要在機(jī)器上執(zhí)行就必須一個(gè)轉(zhuǎn)換環(huán)境,這就是Java虛擬機(jī)即JVM扮演的角色。
這樣做不是非常麻煩嗎?為什么不直接編譯成機(jī)器語(yǔ)言,而是變成中間語(yǔ)言?這樣做不是提高了Java開(kāi)發(fā)的成本嗎,還要安裝一個(gè)虛擬機(jī)?
????????的確,C語(yǔ)言的開(kāi)發(fā)在一些系統(tǒng)中甚至不須要下載編譯器,比方Linux系統(tǒng)下的C語(yǔ)言?xún)H僅須要寫(xiě)一個(gè).c文本文件,然后在終端上直接輸入gcc xxx.c指令就可以編譯成功。
????????可是這樣做的優(yōu)點(diǎn)在于,通過(guò)建立不同操作系統(tǒng)下的JVM版本號(hào)。能夠使得Java編譯后的中間語(yǔ)言通過(guò)不同系統(tǒng)版本號(hào)的JVM直接執(zhí)行。也就是說(shuō)我們不須要在編譯同一個(gè)Java程序多次。一次編譯成功的.class中間語(yǔ)言文件就可以在多個(gè)平臺(tái)上執(zhí)行。
而你在windows系統(tǒng)下c語(yǔ)言編譯得到的.exe文件卻不能在linux系統(tǒng)下執(zhí)行。你須要將原來(lái)的c語(yǔ)言源碼拿來(lái),在linux系統(tǒng)下再編譯一次。
????細(xì)致想想,這有點(diǎn)像司馬光砸缸的故事。是讓人離開(kāi)水還是水離開(kāi)人?是又一次編譯多次還是下載安裝一次虛擬機(jī)?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
2.2 JDK和JRE的差別
????????JRE全稱(chēng)JavaRuntime Environment,即Java執(zhí)行環(huán)境,它是JVM的詳細(xì)實(shí)現(xiàn)。當(dāng)你下載好JDK的時(shí)候,你會(huì)發(fā)現(xiàn)名為jre的一個(gè)文件夾。打開(kāi)后是這樣一個(gè)文件夾。
圖2.1 jre文件夾文件夾
????????bin目錄中是一些可運(yùn)行文件,lib目錄中是運(yùn)行class文件所需的類(lèi)庫(kù)。
????????JDK。全名JavaDevelopment Kit,即Java開(kāi)發(fā)包。它本身自帶一個(gè)jre,主要用來(lái)開(kāi)發(fā)測(cè)試之用。這個(gè)jre與公共jre的差別在于有沒(méi)有server選項(xiàng)。
????????
圖2.2 jdk文件文件夾
2.3 JDK環(huán)境配置中的path系統(tǒng)變量和classpath系統(tǒng)變量
????????曾經(jīng)配置環(huán)境的時(shí)候一直沒(méi)理解path變量和classpath變量的作用。蹭這個(gè)機(jī)會(huì)好好理解一遍。
2.3.1 Path變量
????????Path變量是用來(lái)在cmd上加入指令的
????????比方說(shuō)如今你有一個(gè)英雄聯(lián)盟的游戲,你希望在cmd上直接打開(kāi),這時(shí)候你能夠在Path變量中加入英雄聯(lián)盟游戲exe可運(yùn)行文件所在文件夾地址
圖2.4 Client.exe雙擊便開(kāi)始游戲
圖2.5將Client所在文件夾地址加入到Path變量中
?
圖2.6在cmd上輸入Client指令
?
圖2.7輸入發(fā)現(xiàn)游戲啟動(dòng)了
?
從上面的步驟能夠看出Path變量的作用。
配置Jdk環(huán)境時(shí)在Path系統(tǒng)變量中加入Jdk目錄下的bin目錄的地址的目的就是為了讓操作系統(tǒng)找到指定的工具程序(以windows來(lái)講就是找到.exe文件)。
2.3.2 Classpath變量
????????設(shè)置Classpath的目的是讓Java運(yùn)行環(huán)境找到指定的Java程序,即.class文件。
在配置Java環(huán)境的時(shí)候,這個(gè)變量設(shè)置為jdk/lib目錄中的tools.jar和rt.jar文件的絕對(duì)地址。
jar文件里事實(shí)上是一堆的.class文件,用壓縮文件管理器打開(kāi)tools.jar和rt.jar。能夠看到一堆的.class文件。
圖2.8 tools.jar文件解壓后文件夾
?
jar格式壓縮文件Java執(zhí)行環(huán)境是能夠直接執(zhí)行的。執(zhí)行是尋找當(dāng)中的主方法。
如果你有一個(gè).class文件在桌面上,而你把桌面文件夾的地址加入到了Classpath變量中。那么會(huì)發(fā)生什么呢?
圖2.9在Classpath中加入一個(gè)地址
圖2.10在cmd上使用Java指令直接執(zhí)行Test.class文件
?
????????發(fā)現(xiàn)假設(shè)在Classpath中設(shè)置了一個(gè)文件夾地址。或者一個(gè)jar文件的地址,那么該文件夾中或者該jar文件里的class文件是能夠直接執(zhí)行的。
轉(zhuǎn)載于:https://www.cnblogs.com/cxchanpin/p/6783250.html
總結(jié)
- 上一篇: 团扇的寓意和象征(一把小小的团扇隐藏了哪
- 下一篇: 奇异人生第三章电脑密码(奇异人生最后一章