Java三大版本&JDK、JRE、JVM
Java三大版本
Write Once、Run Anywhere(一次編寫(xiě),隨處運(yùn)行)
- JavaSE:標(biāo)準(zhǔn)版(桌面程序、控制臺(tái)開(kāi)發(fā)......),Java的基礎(chǔ)與核心,也是JavaEE和JavaME技術(shù)的基礎(chǔ)。
- JavaME:嵌入式開(kāi)發(fā)(手機(jī)、小家電......),應(yīng)用范圍較小
- JavaEE:E企業(yè)級(jí)開(kāi)發(fā)(web端、服務(wù)器開(kāi)發(fā)......),是Java技術(shù)應(yīng)用最廣泛的領(lǐng)域,JavaSE是JavaEE的基礎(chǔ)。
JDK、JRE、JVM之間的關(guān)系
關(guān)系:JDK包含JRE,JRE包含JVM
- JDK(Java Development Kit):Java開(kāi)發(fā)工具包,用于Java程序的開(kāi)發(fā)。
- JRE(Java Runtime Environment):Java運(yùn)行時(shí)環(huán)境,只能運(yùn)行.class文件,不能編譯。
- JVM(Java Virtual Machine):Java虛擬機(jī),Java運(yùn)行時(shí)環(huán)境。
一、JDK
JDK(Java Development Kit),Java開(kāi)發(fā)工具包,用于Java程序的開(kāi)發(fā),針對(duì)開(kāi)發(fā)者。
JDK是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基本的類(lèi)庫(kù)(即Java API包括rt.jar)。
JavaAPI是Java的應(yīng)用程序接口,里面有很多已經(jīng)寫(xiě)好的Java Class,包括一些重要的語(yǔ)言結(jié)構(gòu)以及基本圖形,網(wǎng)絡(luò)和文件I/O等等,我們可以直接調(diào)用使用。
二、JRE
JRE(Java Runtime Environment),Java運(yùn)行時(shí)環(huán)境,只能運(yùn)行.class文件,不能編譯,針對(duì)用戶(hù)。JRE,包含了一個(gè)JVM(Java虛擬機(jī)),與Java核心類(lèi)庫(kù)與其所支持的文件。與JDK不同,它不包含開(kāi)發(fā)工具——編譯器、調(diào)試器和其它工具。
將Java源程序(擴(kuò)展名為.java的文件)
JRE,是運(yùn)行Java程序必不可少的,編寫(xiě)好的Java程序必須要JRE才能運(yùn)行,如果想運(yùn)行一個(gè)開(kāi)發(fā)好的Java程序,計(jì)算機(jī)中只需要安裝JRE即可。
包含關(guān)系:
JDK—>JRE、JAVA基礎(chǔ)類(lèi)庫(kù)
JRE—>JVM、Java核心類(lèi)庫(kù)
三、JVM
JVM(Java Virtual Machine),Java虛擬機(jī),Java運(yùn)行時(shí)環(huán)境。
Java虛擬機(jī),是一種虛擬出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上模擬仿真各種計(jì)算機(jī)功能實(shí)現(xiàn)的。
JVM功能:將字節(jié)碼文件(擴(kuò)展名為.class的文件)解釋成具體系統(tǒng)平臺(tái)的機(jī)器指令。
JVM,是整個(gè)Java實(shí)現(xiàn)跨平臺(tái)的最核心的部分,所有的Java程序會(huì)首先被編譯為.class的類(lèi)文件,這種類(lèi)文件可以在虛擬機(jī)上執(zhí)行,也就是說(shuō)class并不直接與機(jī)器的操作系統(tǒng)相對(duì)應(yīng),而是經(jīng)過(guò)虛擬機(jī)間接與操作系統(tǒng)交互,由虛擬機(jī)將程序解釋給本地系統(tǒng)執(zhí)行。
每日三道Java面試題
1.Java有哪幾種基本數(shù)據(jù)類(lèi)型?
Java有4類(lèi)8種數(shù)據(jù)類(lèi)型,它們分別是
1.整形:byte、short、int、long
2.浮點(diǎn)型:float、double
3.字符型:char
4.布爾型:boolean
2.==和equals比較有什么區(qū)別?
==:
如果比較的對(duì)象是基本數(shù)據(jù)類(lèi)型,則比較的是數(shù)值是否一致;
如果比較的是引用數(shù)據(jù)類(lèi)型,則比較的是對(duì)象的地址是否一致。
equals():
equals()默認(rèn)用來(lái)比較對(duì)象的地址是是否一致,不能用于比較基本數(shù)據(jù)類(lèi)型,如果對(duì)象和自身進(jìn)行比較,則equals()方法與==的作用是一樣的。
那為什么常用equals()來(lái)比較String字符串的內(nèi)容相等是為什么呢?
那是因?yàn)閷?duì)于String、Date、Integer等類(lèi)型重寫(xiě)了equals方法,使其比較的是存儲(chǔ)對(duì)象的內(nèi)容是否相等,而不是內(nèi)存地址。
如String類(lèi),已經(jīng)重寫(xiě)了equals方法:
3.Java支持xx ≠ null 不等于寫(xiě)法嗎?
不支持,正常的不等于寫(xiě)法是:!=
?本文轉(zhuǎn)載自微信公眾號(hào)「崔九八」,作者「崔九八」,可以通過(guò)以下二維碼關(guān)注。
轉(zhuǎn)載本文請(qǐng)聯(lián)系「崔九八」公眾號(hào)。