目錄
1、Java開發(fā)環(huán)境
2、JDK和JRE
3、JDK下載和安裝
3.1 下載
3.2 安裝
3.3 配置path環(huán)境變量
JDK8配置方案1:只配置path
?JDK8配置方案2:配置JAVA_HOME+path(推薦)
path配置小結(jié)
JDK17配置方案:自動配置
4、Java核心機制:JVM
補充:Java字節(jié)碼
JVM的優(yōu)點
JVM的缺點
JVM的運行過程
5、Java程序開發(fā)步驟
6、源文件與類名
7、Java API 文檔
小結(jié)
1、Java開發(fā)環(huán)境
Java開發(fā)環(huán)境是指Java程序員開發(fā)、編寫、測試和調(diào)試Java程序所使用的所有工具和技術(shù)。Java開發(fā)環(huán)境通常由以下幾個部分組成:
1. JDK(Java Development Kit):JDK是Java開發(fā)環(huán)境的核心組件,它包括了Java編譯器、JRE(Java運行環(huán)境)、JavaDoc文檔生成器和其他一些工具。JDK是Java程序員開發(fā)Java應(yīng)用程序所必需的軟件包。
2. IDE(集成開發(fā)環(huán)境):IDE是一種集成開發(fā)環(huán)境,提供了代碼編輯器、編譯器、調(diào)試器、版本控制、自動化構(gòu)建、測試等功能。比較流行的Java IDE有Eclipse、NetBeans和IntelliJ IDEA等。
3. 版本控制系統(tǒng):版本控制系統(tǒng)是一種管理源代碼修改歷史記錄的工具,可以跟蹤源代碼修改并協(xié)同開發(fā)。比較流行的版本控制系統(tǒng)有Git、SVN等。
4. 構(gòu)建工具:構(gòu)建工具用于自動化地構(gòu)建和打包Java代碼,比較流行的Java構(gòu)建工具有Maven和Gradle等。
5. 測試工具:測試工具用于對Java應(yīng)用程序進行單元測試、集成測試、性能測試等。JUnit是最為流行的Java單元測試框架之一。
6. 應(yīng)用服務(wù)器:Java應(yīng)用服務(wù)器是一種運行Java應(yīng)用程序的Web服務(wù)器,比較流行的Java應(yīng)用服務(wù)器有Tomcat、Jetty和JBoss等。
2、JDK和JRE
JDK(Java Development Kit)和JRE(Java Runtime Environment)是Java開發(fā)和運行環(huán)境中的兩個重要組件,它們有以下區(qū)別:
1. JDK(Java Development Kit):
? ?- 功能:JDK是Java開發(fā)工具包,用于開發(fā)Java應(yīng)用程序。它包含了Java編譯器(javac)、Java虛擬機(JVM)、開發(fā)工具(如調(diào)試器和監(jiān)視器)、類庫、示例代碼和其他一些開發(fā)工具。
? ?- 作用:JDK提供了開發(fā)Java應(yīng)用程序所需的所有工具和庫。通過JDK,開發(fā)人員可以編寫、編譯和調(diào)試Java代碼,并將其轉(zhuǎn)換為可在JRE上運行的字節(jié)碼。
2. JRE(Java Runtime Environment):
? ?- 功能:JRE是Java運行時環(huán)境,用于運行已編譯的Java應(yīng)用程序。它包含了Java虛擬機(JVM)、類加載器、運行時類庫和其他支持文件。
? ?- 作用:JRE是Java應(yīng)用程序的運行環(huán)境,當(dāng)用戶想要執(zhí)行Java程序時,需要安裝JRE。JRE負(fù)責(zé)將Java字節(jié)碼翻譯成機器語言并執(zhí)行。
簡而言之,JDK是用于開發(fā)Java應(yīng)用程序的工具包,它包含了編譯器、虛擬機等工具,可以將Java源代碼編譯成字節(jié)碼。而JRE是用于運行Java應(yīng)用程序的環(huán)境,它包含了虛擬機和運行時類庫,可以執(zhí)行已經(jīng)編譯的Java字節(jié)碼。在開發(fā)Java應(yīng)用程序時,需要先安裝JDK,而在用戶端運行Java應(yīng)用程序時,只需要安裝JRE即可。
舉例:Java 8.0 Platform的包含部分圖示
3、JDK下載和安裝
3.1 下載
-
下載網(wǎng)址(Oracle公司官網(wǎng)):www.oracle.com
-
下載步驟:如圖所示,在官網(wǎng)底部選擇Developers開發(fā)者
(1)在Developers頁面中間的技術(shù)分類部分,選擇Java
,單擊進入
(2)這里展示的是最新Java版本,例如Java17。單擊Download Java
,然后選擇具體的版本下載。
(3)選擇Download Java按鈕后
(4)如果想安裝Java8 可以選擇如下位置:
(5)選擇Accept License Agreement,
(6)注冊或登錄后下載:
(7)如果需要安裝其它版本,可以選擇Java archive:
接著進行選擇下載即可:
3.2 安裝
建議:安裝路徑不要有中文或者空格等特殊符號。
安裝步驟:
(1)雙擊jdk-8_windows-x64_bin.exe
文件,并單擊下一步
(2)修改安裝路徑,自定義
(3)將安裝路徑修改為D:\develop_tools\jdk\jdk-版本號\
,并單擊下一步
(4)稍后幾秒,安裝完成
3.3 配置path環(huán)境變量
path環(huán)境變量是window操作系統(tǒng)執(zhí)行命令時,所要搜尋的路徑。目的是為了在命令行使用javac.exe等工具時,任意目錄下都可以找到這個工具所在的目錄。
測試:在JDK的安裝目錄的bin目錄下使用javac命令,結(jié)果如下
P.S.沒有配置path變量前,只能在JDK的安裝目錄下使用javac命令
JDK8配置方案1:只配置path
(1)桌面此電腦
鼠標(biāo)右鍵
,選擇屬性——
>>選擇高級系統(tǒng)設(shè)置
(2)在高級
選項卡,單擊環(huán)境變量
,如圖所示:
(3)在系統(tǒng)變量
中,選中Path
環(huán)境變量,雙擊
或者點擊編輯
,如圖所示:
(4)點擊新建
,填入D:\develop_tools\jdk\jdk1.8.0_271\bin
,并將此值上移
到變量列表的首位。如圖所示:
-
編輯模式1:
-
編輯模式2:(注意,結(jié)尾需要有英文模式下的 ; )
(5)環(huán)境變量配置完成,重新開啟DOS命令行,測試:在任意目錄下輸入javac
或java
命令或java -version
,運行成功。
?JDK8配置方案2:配置JAVA_HOME+path(推薦)
(1)(2)同上
(3)在系統(tǒng)變量
中,單擊新建
,創(chuàng)建新的環(huán)境變量
(4)變量名輸入JAVA_HOME
,變量值輸入 D:\develop_tools\jdk\jdk1.8.0_271
,單擊確定
,如圖所示:
(5)選中Path
環(huán)境變量,雙擊
或者點擊編輯
?
(6)在變量值的最前面,鍵入%JAVA_HOME%\bin
。如圖所示:
注意:強烈建議將%JAVA_HOME%\bin聲明在path環(huán)境變量中所有變量的最前面!
(7)環(huán)境變量配置完成,重啟DOS命令行,測試:在任意目錄下輸入javac
或java
命令或java -version
,運行成功。
path配置小結(jié)
JDK17配置方案:自動配置
因為JDK17在安裝之后,自動進行了環(huán)境變量的配置。
建議將JDK17安裝的路徑,設(shè)置為JAVA_HOME,并將%JAVA_HOME%\bin
上移到首位。
4、Java核心機制:JVM
JVM(Java Virtual Machine)是Java虛擬機的縮寫,它是Java程序運行的核心組件。JVM是一個虛擬的計算機,它在物理計算機上模擬了一個執(zhí)行Java字節(jié)碼的環(huán)境。JVM負(fù)責(zé)解釋和執(zhí)行Java字節(jié)碼,實現(xiàn)了跨平臺性和代碼安全性。
補充:Java字節(jié)碼
Java字節(jié)碼是一種中間代碼,也稱為Java類文件。它是Java源代碼編譯成的二進制格式,可以被Java虛擬機(JVM)解釋執(zhí)行。Java字節(jié)碼具有跨平臺的特性,因為它可以在任何安裝了Java虛擬機的硬件平臺和操作系統(tǒng)上運行。
Java字節(jié)碼是一種基于棧的指令集,它使用壓棧、出棧等操作來實現(xiàn)各種語言特性,比如變量賦值、方法調(diào)用、控制流等。Java字節(jié)碼的指令集包括了大量的操作碼,可以執(zhí)行各種不同的操作,比如算術(shù)運算、類型轉(zhuǎn)換、對象創(chuàng)建等等。
Java字節(jié)碼通常由Java編譯器生成,它們以.class文件的形式存儲。當(dāng)Java程序被執(zhí)行時,Java虛擬機會將字節(jié)碼加載到內(nèi)存中,并進行解釋執(zhí)行。在執(zhí)行過程中,Java虛擬機會根據(jù)需要將字節(jié)碼轉(zhuǎn)換成本地代碼,從而提高程序的執(zhí)行效率。
JVM的優(yōu)點
- 跨平臺性:即“
Write once , Run Anywhere
” ,這是Java的核心優(yōu)勢。比如:Java的int永遠(yuǎn)都是32位。不像C++可能是16,32,可能是根據(jù)編譯器廠商規(guī)定的變化。 Java字節(jié)碼可以在任何安裝了Java虛擬機的硬件平臺和操作系統(tǒng)上運行,這使得Java程序具有很好的可移植和跨平臺特性。- 安全性:Java字節(jié)碼是經(jīng)過編譯的二進制代碼,無法被直接修改,因此可以避免一些安全問題。適合于網(wǎng)絡(luò)/分布式環(huán)境,需要提供一個安全機制以防惡意代碼的攻擊。如:
安全防范機制
(ClassLoader類加載器),可以分配不同的命名空間以防替代本地的同名類、字節(jié)代碼檢查。- 高效性:Java字節(jié)碼是經(jīng)過優(yōu)化的中間代碼,可以在運行時進行即時編譯,提高程序的執(zhí)行效率??陀^上,高級語言運行效率總是低于低級語言的,這個無法避免。Java語言本身發(fā)展中通過虛擬機的優(yōu)化提升了
幾十倍運行效率
。比如,通過JIT(JUST IN TIME)即時編譯技術(shù)提高運行效率。- 面向?qū)ο笮裕?/strong>面向?qū)ο笫且环N程序設(shè)計技術(shù),非常
適合大型軟件的設(shè)計和開發(fā)
。面向?qū)ο缶幊讨С址庋b、繼承、多態(tài)等特性,讓程序更好達到高內(nèi)聚
,低耦合
的標(biāo)準(zhǔn)。- 健壯性:吸收了C/C++語言的優(yōu)點,但去掉了其影響程序健壯性的部分(如指針、內(nèi)存的申請與釋放等),提供了一個相對安全的內(nèi)存管理和訪問機制。
- 簡單性:Java就是C++語法的
簡化版
,我們也可以將Java稱之為“C++--
”。比如:頭文件,指針運算,結(jié)構(gòu),聯(lián)合,操作符重載,虛基類等。
JVM的缺點
性能問題:JVM在解釋執(zhí)行Java字節(jié)碼時,會引入一定的運行時開銷,這會影響程序的執(zhí)行效率。雖然JVM提供了即時編譯(JIT)等優(yōu)化技術(shù),但是在某些場景下,程序的性能仍然無法滿足要求。
內(nèi)存占用問題:JVM需要管理程序的內(nèi)存分配和回收,這會占用一定的系統(tǒng)資源,特別是堆內(nèi)存的使用情況經(jīng)常需要進行調(diào)優(yōu)。此外,JVM對于大型應(yīng)用程序的啟動時間也較長。
安全性問題:JVM雖然具有一定的安全性,但是它也存在一些漏洞和風(fēng)險。比如,惡意代碼可以通過反射機制繞過JVM的訪問控制,從而獲取系統(tǒng)敏感信息。
異構(gòu)性問題:JVM在不同的硬件平臺和操作系統(tǒng)上可能會表現(xiàn)出不同的性能和特性,這會增加跨平臺開發(fā)的難度。
調(diào)試和診斷問題:由于JVM隱藏了Java代碼和底層操作系統(tǒng)之間的細(xì)節(jié),所以對于一些復(fù)雜的問題,調(diào)試和診斷可能會比較困難。
JVM圖示:
圖片來源:https://www.cnblogs.com/darrenqiao/p/9256565.html
JVM模型圖示:
圖片來源:二、Jvm內(nèi)存模型_探索jvm底層之內(nèi)存模型-CSDN博客
JVM的運行過程
1. 類加載:JVM首先需要加載Java字節(jié)碼文件,這些文件通常是以.class文件的形式存在。類加載器負(fù)責(zé)將字節(jié)碼文件加載到內(nèi)存中,并進行驗證、準(zhǔn)備和解析等操作。
2. 字節(jié)碼解釋與執(zhí)行:JVM將加載到內(nèi)存中的字節(jié)碼解釋成機器碼,并按照指令序列依次執(zhí)行。JVM提供了一組指令集,用于執(zhí)行各種操作,比如變量賦值、方法調(diào)用、條件判斷等。
3. 運行時內(nèi)存區(qū)域管理:JVM將運行時內(nèi)存劃分為不同的區(qū)域,包括方法區(qū)、堆、棧、程序計數(shù)器和本地方法棧等。這些區(qū)域分別用于存儲類信息、對象實例、方法調(diào)用棧、線程指令地址等。
4. 垃圾回收:JVM通過垃圾回收器(Garbage Collector)自動管理內(nèi)存,回收不再使用的對象,釋放內(nèi)存空間。垃圾回收器會根據(jù)一定的策略判斷對象是否可回收,并進行相應(yīng)的回收操作。
5. 異常處理:JVM提供了異常處理機制,當(dāng)程序中發(fā)生異常時,JVM會捕獲并處理異常。它會在堆棧中查找適合的異常處理器,執(zhí)行相應(yīng)的異常處理代碼。
JVM的實現(xiàn)原理包括以下幾個關(guān)鍵組成部分:
1. 類加載子系統(tǒng):負(fù)責(zé)加載、驗證、準(zhǔn)備和解析類及其依賴的類。
2. 內(nèi)存管理子系統(tǒng):負(fù)責(zé)管理程序運行時的內(nèi)存分配和回收,包括堆、棧以及方法區(qū)等。
3. 執(zhí)行引擎:負(fù)責(zé)解釋和執(zhí)行字節(jié)碼指令,包括解釋執(zhí)行和即時編譯執(zhí)行兩種方式。
4. 運行時數(shù)據(jù)區(qū)域:包括方法區(qū)、堆、棧、程序計數(shù)器和本地方法棧等,用于存儲類信息、對象實例、方法調(diào)用棧等數(shù)據(jù)。
JVM的實現(xiàn)原理是基于規(guī)范定義的,不同的JVM實現(xiàn)可以有不同的優(yōu)化和實現(xiàn)方式,但都需要保證符合Java虛擬機規(guī)范。這樣,Java程序可以在不同的操作系統(tǒng)和硬件平臺上運行,實現(xiàn)了Java的跨平臺特性。
5、Java程序開發(fā)步驟
注意:
Java語言是一門嚴(yán)格區(qū)分大小寫的語言
標(biāo)點符號使用問題
不能用中文符號,英文半角的標(biāo)點符號
括號問題,成對出現(xiàn)
6、源文件與類名
(1)源文件名是否必須與類名一致?public呢?
如果這個類不是public,那么源文件名可以和類名不一致。但是不便于代碼維護。
如果這個類是public,那么要求源文件名必須與類名一致。否則編譯報錯。
建議:不管是否是public,都與源文件名保持一致,而且一個源文件盡量只寫一個類,目的是為了好維護。
(2)一個源文件中是否可以有多個類?public呢?
一個源文件中可以有多個類,編譯后會生成多個.class字節(jié)碼文件。 ?
但是一個源文件只能有一個public的類。
7、Java API 文檔
-
API (Application Programming Interface,應(yīng)用程序編程接口)是 Java 提供的基本編程接口。
-
Java語言提供了大量的基礎(chǔ)類,因此 Oracle 也為這些基礎(chǔ)類提供了相應(yīng)的說明文檔,用于告訴開發(fā)者如何使用這些類,以及這些類里包含的方法。大多數(shù)Java書籍中的類的介紹都要參照它來完成,它是編程者經(jīng)常查閱的資料。
-
Java API文檔,即為JDK使用說明書、幫助文檔。
下載API文檔:
-
在線看:Overview (Java SE 17 & JDK 17)
-
離線下載:Java Development Kit 17 Documentation
小結(jié)
JDK = JRE + 開發(fā)工具集(例如Javac編譯工具等)
JRE = JVM + Java SE標(biāo)準(zhǔn)類庫
綜上所述,Java開發(fā)環(huán)境是一個包含多個部分的工具集合,Java程序員可以使用這些工具來進行Java應(yīng)用程序的開發(fā)、測試、部署和運行。
參考
文檔部分段落引自尚硅谷《Java基礎(chǔ)》中的課件與電子教材中的《尚硅谷_宋紅康_第01章_Java語言概述》
JVM類加載機制概述 - darrenqiao - 博客園
JVM內(nèi)存區(qū)域劃分-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-832209.html
二、Jvm內(nèi)存模型_探索jvm底層之內(nèi)存模型-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-832209.html
到了這里,關(guān)于Java開發(fā)環(huán)境簡介(JDK、JRE、JVM)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!