華為18級大佬整理的,Java 面試知識點「精華背誦版」,面試必備

Java 基礎 40 語言特性 12

Q1:Java 語言的優點?

① 平台無關性,擺脱硬件束縛,“一次編寫,到處運行”。

② 相對安全的內存管理和訪問機制,避免大部分內存泄漏和指針越界。

③ 熱點代碼檢測和運行時編譯及優化,使程序隨運行時間增長獲得更高性能。

④ 完善的應用程序接口,支持第三方類庫。

Q2:Java 如何實現平台無關?

JVM: Java 編譯器可生成與計算機體系結構無關的字節碼指令,字節碼文件不僅可以輕易地在任何機器上解釋執行,還可以動態地轉換成本地機器代碼,轉換是由 JVM 實現的,JVM 是平台相關的,屏蔽了不同操作系統的差異。

語言規範: 基本數據類型大小有明確規定,例如 int 永遠為 32 位,而 C/C++ 中可能是 16 位、32 位,也可能是編譯器開發商指定的其他大小。Java 中數值類型有固定字節數,二進制數據以固定格式存儲和傳輸,字符串採用標準的 Unicode 格式存儲。

Q3:JDK 和 JRE 的區別?

JDK: Java Development Kit,開發工具包。提供了編譯運行 Java 程序的各種工具,包括編譯器、JRE 及常用類庫,是 JAVA 核心。

JRE: Java Runtime Environment,運行時環境,運行 Java 程序的必要環境,包括 JVM、核心類庫、核心配置工具。

Q4:Java 按值調用還是引用調用?

按值調用指方法接收調用者提供的值,按引用調用指方法接收調用者提供的變量地址。

Java 總是按值調用,方法得到的是所有參數值的副本,傳遞對象時實際上方法接收的是對象引用的副本。方法不能修改基本數據類型的參數,如果傳遞了一個 int 值 ,改變值不會影響實參,因為改變的是值的一個副本。

可以改變對象參數的狀態,但不能讓對象參數引用一個新的對象。如果傳遞了一個 int 數組,改變數組的內容會影響實參,而改變這個參數的引用並不會讓實參引用新的數組對象。

Q5:淺拷貝和深拷貝的區別?

淺拷貝: 只複製當前對象的基本數據類型及引用變量,沒有複製引用變量指向的實際對象。修改克隆對象可能影響原對象,不安全。

深拷貝: 完全拷貝基本數據類型和引用數據類型,安全。

Q6:什麼是反射?

在運行狀態中,對於任意一個類都能知道它的所有屬性和方法,對於任意一個對象都能調用它的任意方法和屬性,這種動態獲取信息及調用對象方法的功能稱為反射。缺點是破壞了封裝性以及泛型約束。反射是框架的核心,Spring 大量使用反射。

Q7:Class 類的作用?如何獲取一個 Class 對象?

在程序運行期間,Java 運行時系統為所有對象維護一個運行時類型標識,這個信息會跟蹤每個對象所屬的類,虛擬機利用運行時類型信息選擇要執行的正確方法,保存這些信息的類就是 Class,這是一個泛型類。

獲取 Class 對象:① 類名.class 。②對象的 getClass方法。③ Class.forName(類的全限定名)。

Q8:什麼是註解?什麼是元註解?

註解是一種標記,使類或接口附加額外信息,幫助編譯器和 JVM 完成一些特定功能,例如 @Override 標識一個方法是重寫方法。

元註解是自定義註解的註解,例如:

@Target:約束作用位置,值是 ElementType 枚舉常量,包括 METHOD 方法、VARIABLE 變量、TYPE 類/接口、PARAMETER 方法參數、CONSTRUCTORS 構造方法和 LOACL_VARIABLE 局部變量等。

@Rentention:約束生命週期,值是 RetentionPolicy 枚舉常量,包括 SOURCE 源碼、CLASS 字節碼和 RUNTIME 運行時。

@Documented:表明這個註解應該被 javadoc 記錄。

Q9:什麼是泛型,有什麼作用?

泛型本質是參數化類型,解決不確定對象具體類型的問題。泛型在定義處只具備執行 Object 方法的能力。

泛型的好處:① 類型安全,放置什麼出來就是什麼,不存在 ClassCastException。② 提升可讀性,編碼階段就顯式知道泛型集合、泛型方法等處理的對象類型。③ 代碼重用,合併了同類型的處理代碼。

Q10:泛型擦除是什麼?

泛型用於編譯階段,編譯後的字節碼文件不包含泛型類型信息,因為虛擬機沒有泛型類型對象,所有對象都屬於普通類。例如定義 List

版權聲明:本文源自 網絡, 於,由 楠木軒 整理發佈,共 1838 字。

轉載請註明: 華為18級大佬整理的,Java 面試知識點「精華背誦版」,面試必備 - 楠木軒