三天吃透Java面試八股文(2023最新整理)
Java的特點(diǎn)
Java是一門面向?qū)ο蟮木幊陶Z言。面向?qū)ο蠛兔嫦蜻^程的區(qū)別參考下一個問題。
Java具有平臺獨(dú)立性和移植性。
Java有一句口號:
Write once, run anywhere
,一次編寫、到處運(yùn)行。這也是Java的魅力所在。而實(shí)現(xiàn)這種特性的正是Java虛擬機(jī)JVM。已編譯的Java程序可以在任何帶有JVM的平臺上運(yùn)行。你可以在windows平臺編寫代碼,然后拿到linux上運(yùn)行。只要你在編寫完代碼后,將代碼編譯成.class文件,再把class文件打成Java包,這個jar包就可以在不同的平臺上運(yùn)行了。
Java具有穩(wěn)健性。
Java是一個強(qiáng)類型語言,它允許擴(kuò)展編譯時檢查潛在類型不匹配問題的功能。Java要求顯式的方法聲明,它不支持C風(fēng)格的隱式聲明。這些嚴(yán)格的要求保證編譯程序能捕捉調(diào)用錯誤,這就導(dǎo)致更可靠的程序。
異常處理是Java中使得程序更穩(wěn)健的另一個特征。異常是某種類似于錯誤的異常條件出現(xiàn)的信號。使用
try/catch/finally
語句,程序員可以找到出錯的處理代碼,這就簡化了出錯處理和恢復(fù)的任務(wù)。
Java是如何實(shí)現(xiàn)跨平臺的?
Java是通過JVM(Java虛擬機(jī))實(shí)現(xiàn)跨平臺的。
JVM可以理解成一個軟件,不同的平臺有不同的版本。我們編寫的Java代碼,編譯后會生成.class 文件(字節(jié)碼文件)。Java虛擬機(jī)就是負(fù)責(zé)將字節(jié)碼文件翻譯成特定平臺下的機(jī)器碼,通過JVM翻譯成機(jī)器碼之后才能運(yùn)行。不同平臺下編譯生成的字節(jié)碼是一樣的,但是由JVM翻譯成的機(jī)器碼卻不一樣。
只要在不同平臺上安裝對應(yīng)的JVM,就可以運(yùn)行字節(jié)碼文件,運(yùn)行我們編寫的Java程序。
因此,運(yùn)行Java程序必須有JVM的支持,因?yàn)榫幾g的結(jié)果不是機(jī)器碼,必須要經(jīng)過JVM的翻譯才能執(zhí)行。
本文內(nèi)容已經(jīng)整理到大廠面試手冊了,手冊內(nèi)容包含計(jì)算機(jī)基礎(chǔ)、Java基礎(chǔ)、多線程、JVM、數(shù)據(jù)庫、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服務(wù)、設(shè)計(jì)模式、架構(gòu)、校招社招分享等高頻面試題,非常實(shí)用,有小伙伴靠著這份手冊拿過字節(jié)offer~


需要的小伙伴可以自行下載:
大廠高頻面試題總結(jié)mp.weixin.qq.com/s?__biz=Mzg2OTY1NzY0MQ==&mid=2247485445&idx=1&sn=1c6e224b9bb3da457f5ee03894493dbc&chksm=ce98f543f9ef7c55325e3bf336607a370935a6c78dbb68cf86e59f5d68f4c51d175365a189f8#rd

Java 與 C++ 的區(qū)別
Java 是純粹的面向?qū)ο笳Z言,所有的對象都繼承自 java.lang.Object,C++ 兼容 C ,不但支持面向?qū)ο笠仓С置嫦蜻^程。
Java 通過虛擬機(jī)從而實(shí)現(xiàn)跨平臺特性, C++ 依賴于特定的平臺。
Java 沒有指針,它的引用可以理解為安全指針,而 C++ 具有和 C 一樣的指針。
Java 支持自動垃圾回收,而 C++ 需要手動回收。
Java 不支持多重繼承,只能通過實(shí)現(xiàn)多個接口來達(dá)到相同目的,而 C++ 支持多重繼承。
JDK/JRE/JVM三者的關(guān)系
JVM
英文名稱(Java Virtual Machine),就是我們耳熟能詳?shù)?Java 虛擬機(jī)。Java 能夠跨平臺運(yùn)行的核心在于 JVM 。

所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機(jī)上執(zhí)行。也就是說class文件并不直接與機(jī)器的操作系統(tǒng)交互,而是經(jīng)過虛擬機(jī)間接與操作系統(tǒng)交互,由虛擬機(jī)將程序解釋給本地系統(tǒng)執(zhí)行。
針對不同的系統(tǒng)有不同的 jvm 實(shí)現(xiàn),有 Linux 版本的 jvm 實(shí)現(xiàn),也有Windows 版本的 jvm 實(shí)現(xiàn),但是同一段代碼在編譯后的字節(jié)碼是一樣的。這就是Java能夠跨平臺,實(shí)現(xiàn)一次編寫,多處運(yùn)行的原因所在。
JRE
英文名稱(Java Runtime Environment),就是Java 運(yùn)行時環(huán)境。我們編寫的Java程序必須要在JRE才能運(yùn)行。它主要包含兩個部分,JVM 和 Java 核心類庫。

JRE是Java的運(yùn)行環(huán)境,并不是一個開發(fā)環(huán)境,所以沒有包含任何開發(fā)工具,如編譯器和調(diào)試器等。
如果你只是想運(yùn)行Java程序,而不是開發(fā)Java程序的話,那么你只需要安裝JRE即可。
JDK
英文名稱(Java Development Kit),就是 Java 開發(fā)工具包
學(xué)過Java的同學(xué),都應(yīng)該安裝過JDK。當(dāng)我們安裝完JDK之后,目錄結(jié)構(gòu)是這樣的

可以看到,JDK目錄下有個JRE,也就是JDK中已經(jīng)集成了 JRE,不用單獨(dú)安裝JRE。
另外,JDK中還有一些好用的工具,如jinfo,jps,jstack等。

最后,總結(jié)一下JDK/JRE/JVM,他們?nèi)叩年P(guān)系
JRE = JVM + Java 核心類庫
JDK = JRE + Java工具 + 編譯器 + 調(diào)試器

由于篇幅有限?
想要領(lǐng)取資料的小伙伴們,請關(guān)注下方微信公眾號領(lǐng)取哦~?
然后就等著私信查收吧~

