Java基礎(chǔ)教程(2)--Java開發(fā)環(huán)境

一.JVM阱缓、JRE和JDK的概念

對于初學(xué)者來說,這三個(gè)術(shù)語出現(xiàn)的頻率很高举农,而且有關(guān)這它們的問題在面試題中也會經(jīng)常出現(xiàn)荆针。因此,理解它們的定義、區(qū)別和聯(lián)系就顯得尤為重要航背。在學(xué)習(xí)這幾個(gè)專業(yè)術(shù)語之前喉悴,我們先來了解一下Java代碼的編譯運(yùn)行過程。

機(jī)器語言是用二進(jìn)制代碼表示的玖媚,能夠被計(jì)算機(jī)直接識別和執(zhí)行的一種機(jī)器指令的集合箕肃。也就是說,通過機(jī)器語言今魔,我們可以直接操控電腦去做任何我們想要執(zhí)行的操作勺像。但是,由于機(jī)器語言是用二進(jìn)制表示的错森,這就導(dǎo)致了它學(xué)習(xí)成本高吟宦、代碼晦澀難懂、不便于調(diào)試等缺點(diǎn)涩维。試想一下殃姓,寫代碼只用0和1,每個(gè)指令都要查手冊瓦阐,而且一旦手誤寫錯(cuò)一個(gè)數(shù)字辰狡,很難靠肉眼識別出來,這對于程序員來說垄分,無疑是一件非常痛苦的事。

高級語言是以人類的日常語言為基礎(chǔ)的一種編程語言娃磺,使用一般人易于接受的文字來表示(例如漢字薄湿、不規(guī)則英文或其他外語),它的學(xué)習(xí)成本相對于機(jī)器語言來說大大降低偷卧,從而使程序編寫更容易豺瘤,亦有較高的可讀性。編譯器是將高級語言翻譯成機(jī)器語言的軟件听诸,使用高級語言編寫的代碼經(jīng)過編譯器翻譯以后得到電腦可以直接執(zhí)行的機(jī)器語言代碼坐求,這就相當(dāng)于變相地編寫機(jī)器語言。電腦領(lǐng)域已經(jīng)發(fā)明了成百上千種編程語言晌梨,每種語言都有對應(yīng)的編譯器桥嗤。在編寫高級語言之前,首先要確保電腦上已經(jīng)安裝了對應(yīng)的編譯器仔蝌。

高級語言大體上可分為編譯型語言和解釋型語言泛领。編譯型語言首先將源代碼通過編譯器生成機(jī)器語言代碼,再由電腦運(yùn)行生成的機(jī)器語言代碼敛惊。像C和C++等都是編譯型語言渊鞋。解釋型語言不需要事先編譯,直接將源代碼解釋成機(jī)器語言并立即執(zhí)行,每次執(zhí)行都需要重新翻譯锡宋。像Python和JavaScript等都是解釋型語言儡湾。

Java語言是一種特殊的存在。Java源代碼(文件后綴名為.java)首先經(jīng)過編譯之后轉(zhuǎn)換為一種稱為Java字節(jié)碼的中間語言(文件后綴名為.class)执俩,再由Java虛擬機(jī)對字節(jié)碼進(jìn)行解釋和執(zhí)行徐钠。如果說它是編譯型語言,它編譯之后得到的并不是機(jī)器語言代碼奠滑,無法直接運(yùn)行丹皱,這與編譯型語言的定義相矛盾;但是如果說他是解釋型語言宋税,似乎也不太合理摊崭,因?yàn)樗诮忉屩坝幸粋€(gè)編譯過程。因此杰赛,可以說它既是編譯型語言呢簸,又是解釋型語言,也可以說它既不是編譯型語言乏屯,又不是解釋型語言根时。

現(xiàn)在回過頭來看JVM、JRE和JDK的概念辰晕。JVM(Java Virtual Machine蛤迎,Java虛擬機(jī))是將Java字節(jié)碼解釋給本地系統(tǒng)運(yùn)行的軟件。JVM是Java實(shí)現(xiàn)其平臺無關(guān)性特點(diǎn)的關(guān)鍵含友。Java語言使用JVM屏蔽了與具體平臺相關(guān)的信息替裆,使得Java語言編譯程序只需生成在Java虛擬機(jī)上運(yùn)行的目標(biāo)代碼(字節(jié)碼),就可以在多種平臺上不加修改地運(yùn)行窘问。JVM在執(zhí)行字節(jié)碼時(shí)辆童,把字節(jié)碼解釋成具體平臺上的機(jī)器指令執(zhí)行。這就是Java的能夠“一次編譯惠赫,到處運(yùn)行”的原因把鉴。

但是只有JVM還不能執(zhí)行字節(jié)碼,因?yàn)樵诮忉屪止?jié)碼的時(shí)候JVM需要調(diào)用解釋所需要的類庫儿咱。JRE(Java Runtime Environment庭砍,Java運(yùn)行時(shí)環(huán)境)是運(yùn)行Java程序所必需的環(huán)境的集合,包含JVM標(biāo)準(zhǔn)實(shí)現(xiàn)及Java核心類庫混埠。也就是說逗威,如果要運(yùn)行Java程序,那么電腦上必須安裝JRE岔冀。

安裝JRE之后凯旭,我們就可以在電腦上運(yùn)行編譯好的Java程序了概耻。這對于Java程序的用戶來說足夠了,但是如果是Java開發(fā)人員罐呼,那么只安裝JRE將無法進(jìn)行Java開發(fā)鞠柄,因?yàn)闊o法將Java源代碼編譯成字節(jié)碼。JDK(Java Development Kit嫉柴,Java開發(fā)工具包)中包含了編譯Java源代碼的工具javac厌杜,提取Java文檔的工具javadoc等工具和JRE。因此计螺,安裝JDK以后夯尽,我們既可以進(jìn)行Java的開發(fā),也可以運(yùn)行Java程序登馒。下面這張圖很好地說明了這三者之間的關(guān)系:

二.安裝JDK

1.下載JDK

正如上一篇文章中所說匙握,我們選擇安裝JDK11。這里是它的下載地址陈轿。個(gè)人比較喜歡壓縮包的安裝方式圈纺,所以這里選擇windows64位的zip文件。注意要勾選Accept License Aggrement麦射。

將下載的壓縮包解壓至任何你想要安裝的位置蛾娶。這里我將解壓出的jdk-11文件夾放在了F盤的env文件夾下。

2.配置環(huán)境變量

接下來需要配置環(huán)境變量Path和JAVA_HOME潜秋。首先介紹一下為什么需要配置這兩個(gè)環(huán)境變量蛔琅。Path環(huán)境變量用來指定cmd中可執(zhí)行文件的搜索路徑。編譯Java源代碼需要使用javac.exe峻呛,運(yùn)行字節(jié)碼需要使用java.exe揍愁,如果沒有配置這兩個(gè)可執(zhí)行文件的路徑,那么在cmd中使用這兩個(gè)命令時(shí)將會出現(xiàn)“xxx不是內(nèi)部或外部命令”的錯(cuò)誤杀饵。而JAVA_HOME環(huán)境變量則是用來定義JDK的安裝路徑。在一個(gè)環(huán)境變量中可以使用其他環(huán)境變量的值谬擦,使用時(shí)需要在其他環(huán)境變量前后加%切距。例如,JDK的安裝路徑是F:\env\jdk-11惨远,那么JAVA_HOME也需要配置為F:\env\jdk-11谜悟。javac.exe和java.exe的路徑為F:\env\jdk-11\bin,那么Path中只需要配置%JAVA_HOME%\bin即可北秽。這樣做的一個(gè)好處是葡幸,如果要切換或修改JDK的路徑,只需要修改JAVA_HOME的值贺氓。另外一個(gè)需要配置JAVA_HOME的原因是蔚叨,許多組件依賴于Java的環(huán)境,如果不配置JAVA_HOME環(huán)境變量,這些組件將會因?yàn)檎也坏絁ava的安裝路徑而報(bào)錯(cuò)蔑水,例如tomcat邢锯、maven等。

在許多其他有關(guān)配置JDK環(huán)境變量的教程中都配置了CLASSPATH搀别,但是從Java1.5開始就可以不配置這個(gè)環(huán)境變量了丹擎,而且每篇教程里CLASSPATH的值都不一樣,有配置rt.jar的歇父,有配置dt.jar的蒂培,也有配置tools.jar的,這對于初學(xué)者來說非常不友好榜苫。這里我們選擇不配置CLASSPATH變量护戳。

最后再來介紹一下系統(tǒng)變量和用戶變量。在配置每個(gè)環(huán)境變量時(shí)单刁,既可以將其配置在系統(tǒng)變量里灸异,又可以配置在用戶變量里。但是系統(tǒng)變量對所有用戶都有效羔飞,而用戶變量只對當(dāng)前用戶有效肺樟。并且系統(tǒng)變量的優(yōu)先級高于用戶變量,也就是說如果一個(gè)環(huán)境變量在系統(tǒng)變量和用戶變量中都進(jìn)行了配置逻淌,那么電腦將優(yōu)先使用系統(tǒng)變量么伯。因?yàn)橄到y(tǒng)變量中有許多比較重要的環(huán)境變量,所以我選擇在用戶變量中配置Path和JAVA_HOME變量卡儒。

如果是使用IDEA(一個(gè)JDK的集成開發(fā)環(huán)境田柔,下文會講到)進(jìn)行開發(fā)的話,Path變量是沒有必要配置的骨望,因?yàn)榭梢栽贗DEA中配置Java的安裝路徑硬爆。但是為了演示在cmd中使用javac和java命令,我們將同時(shí)配置Path和JAVA_HOME變量擎鸠。

下面是具體的配置步驟:

(1)右鍵我的電腦缀磕,屬性,找到高級系統(tǒng)設(shè)置劣光;

(2)高級袜蚕,環(huán)境變量;

(3)在用戶變量中新建JAVA_HOME變量绢涡,復(fù)制JDK的安裝路徑并粘貼到變量值牲剃,確定;

(4)在用戶變量中編輯Path變量(如果沒有就新建)雄可,填入%JAVA_HOME%\bin凿傅,確定缠犀;

之后一直點(diǎn)擊確定即可退出環(huán)境變量的配置。至此狭归,JDK的環(huán)境變量就全部配置完成了夭坪。此時(shí)可以打開cmd測試一下(如果配置前已經(jīng)打開了cmd,需要關(guān)閉并重新打開过椎,因?yàn)榄h(huán)境變量會在下一次打開cmd時(shí)才生效)室梅。輸入javac -version和java -version,看到如下輸出則表示配置成功:

三.第一個(gè)Java程序--HelloWorld

下面我們將編寫一個(gè)非常簡單的Java程序來體驗(yàn)Java代碼的編寫疚宇、編譯和運(yùn)行亡鼠。

首先新建一個(gè)文本文檔,然后編寫以下代碼:

publicclassHelloWorld{publicstaticvoidmain(String[] args){ System.out.println("Hello World!");// Display the string.}}

保存敷待,然后將文件名修改為“HelloWorld.java”间涵。打開cmd,切換到這個(gè)文件所在的目錄(我將這個(gè)文件放在了F盤的根目錄下)榜揖,然后運(yùn)行javac HelloWorld.java進(jìn)行編譯勾哩,此時(shí)會在目錄中看到生成了一個(gè)HelloWorld.class文件,這個(gè)文件就是編譯之后生成的字節(jié)碼举哟。接著運(yùn)行java HelloWorld(這里不用加.class后綴)思劳,命令行將會輸出“Hello World!”桩皿。

這里看不懂沒有關(guān)系雇逞,我們會在后面的文章中對每一個(gè)語法進(jìn)行介紹粗悯。

四.集成開發(fā)環(huán)境

上一節(jié)中魁兼,我們已經(jīng)了解了如何從命令行編譯和運(yùn)行一個(gè)Java程序,這是一個(gè)很有用的技能膘融。但是每次編譯和運(yùn)行都要手動輸入命令則會顯得有點(diǎn)麻煩坑夯。集成開發(fā)環(huán)境(Integrated Development Environment喂窟,以下簡稱IDE)集成了這些功能庐椒,在編寫完代碼后只需要點(diǎn)擊運(yùn)行按鈕椒舵,IDE將會在后臺自動為我們執(zhí)行這些命令并將輸出顯示在控制臺上。當(dāng)然约谈,IDE的功能遠(yuǎn)不止于此笔宿,它還提供了調(diào)試、分析窗宇、自動補(bǔ)全、語法檢測等許多功能特纤,它使得我們的開發(fā)工作更加輕松高效军俊。

Java的IDE有很多,其中最出名的要屬eclipse和Intellij IDEA了捧存。eclipse是一個(gè)開源的粪躬、免費(fèi)的集成開發(fā)環(huán)境担败。筆者剛開始學(xué)習(xí)Java使用的就是這款I(lǐng)DE,直到后來遇到了IDEA镰官。個(gè)人更加喜歡IDEA提前,功能非常強(qiáng)大,界面也很美觀泳唠。網(wǎng)上有很多人就eclipse和IDEA哪個(gè)更好展開了激烈的討論狈网,在我看來這是沒有必要的。IDE只是一個(gè)工具笨腥,每個(gè)人選擇自己用著順手的工具就可以了拓哺,我們真正關(guān)注的編程語言本身,而不是使用什么工具并且說服別人一定要去用什么工具脖母。在后面的教程中我都會使用IDEA進(jìn)行講解士鸥。

IDEA分為社區(qū)版(Community)和旗艦版(Ultimate),社區(qū)版免費(fèi)谆级,但是相對于旗艦版來說少了很多功能烤礁,不過對于Java初學(xué)者來說肯定是夠用了。旗艦版收費(fèi)肥照,而且非常貴脚仔,第一年的價(jià)格是499美刀,之后每年便宜100美刀建峭,第三年及以后都是299美刀玻侥。學(xué)生黨可以憑借教育網(wǎng)郵箱(后綴為.edu.cn的郵箱)申請免費(fèi)試用。如果不是學(xué)生黨到但是還是想使用旗艦版的話亿蒸,這里推薦一個(gè)提供免費(fèi)注冊碼的網(wǎng)站凑兰,上面有詳細(xì)的教程。

相信有很多學(xué)習(xí)java的道友边锁,海量知識分姑食,絕對是Java干貨,等各位的到來茅坛,我們一同從入門到精通吧音半!

Java學(xué)習(xí)交流:【47】974【9726】

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贡蓖,隨后出現(xiàn)的幾起案子曹鸠,更是在濱河造成了極大的恐慌,老刑警劉巖斥铺,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彻桃,死亡現(xiàn)場離奇詭異,居然都是意外死亡晾蜘,警方通過查閱死者的電腦和手機(jī)邻眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門眠屎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肆饶,你說我怎么就攤上這事改衩。” “怎么了驯镊?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵葫督,是天一觀的道長。 經(jīng)常有香客問我阿宅,道長候衍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任洒放,我火速辦了婚禮蛉鹿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘往湿。我一直安慰自己妖异,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布领追。 她就那樣靜靜地躺著他膳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绒窑。 梳的紋絲不亂的頭發(fā)上棕孙,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音些膨,去河邊找鬼蟀俊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛订雾,可吹牛的內(nèi)容都是我干的肢预。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洼哎,長吁一口氣:“原來是場噩夢啊……” “哼烫映!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起噩峦,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤锭沟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后识补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體族淮,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瞧筛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡导盅,死狀恐怖较幌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情白翻,我是刑警寧澤乍炉,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站滤馍,受9級特大地震影響岛琼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巢株,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一槐瑞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阁苞,春花似錦困檩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骚灸,卻和暖如春糟趾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甚牲。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工义郑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳖藕。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓魔慷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親著恩。 傳聞我的和親對象是個(gè)殘疾皇子院尔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 瑞雪紛紛下, 千山樹綻花喉誊。 瓊瑤催雅興邀摆, 幽嶺練瑜伽。 2018.1.30.
    艾汕敬明閱讀 158評論 0 1
  • 產(chǎn)后產(chǎn)檢到了伍茄,帶著寶寶一起去醫(yī)院做檢查栋盹。先是檢查媽媽的各項(xiàng),經(jīng)過一個(gè)上午掛號敷矫,排隊(duì)例获,抽血汉额,等結(jié)果,一切還算回復(fù)不錯(cuò)...
    大臉貓左左閱讀 176評論 0 0
  • 一、Gitlab 安裝 1. 環(huán)境準(zhǔn)備 本教程主要以 CentOS 7為主收壕,其他系統(tǒng)請查看官方文檔對比妓灌。 1. 安...
    mcjiffy閱讀 13,064評論 0 2
  • 孩子撒謊虫埂,家長們一聽定會心頭一緊,很擔(dān)心孩子從此走上歧路圃验,很害怕孩子有不少事情瞞著自己掉伏,感覺十分揪心! 女兒雋雋前...
    青梅才雋閱讀 774評論 0 3