Java面試寶典:基礎二

🔒 25. final vs abstract 關鍵字
關鍵字修飾對象作用規則
final禁止被繼承final class MyClass { ... }
方法禁止被子類重寫public final void func()
變量變為常量(基本類型值不可變,引用類型地址不可變)final int MAX = 100;
abstract必須被繼承abstract class Animal { ... }
方法必須被子類重寫abstract void eat();

關鍵區別

final Dog dog = new Dog("歐歐");  
dog.name = "美美";  // ? 允許修改對象屬性  
dog = new Dog("亞亞"); // ? 禁止修改引用地址  

?? 26. final vs finally vs finalize
關鍵字類別作用示例
final修飾符定義不可變實體(類/方法/變量)final class Immutable { ... }
finally異常處理塊確保資源釋放(無論是否發生異常)try { ... } finally { conn.close(); }
finalizeObject類方法GC回收對象前調用的清理方法(已廢棄)protected void finalize() { /* 清理 */ }

注意

  • Java 9+ 廢棄 finalize(),推薦使用 Cleanertry-with-resources
  • finally始終執行(除非 System.exit() 或 JVM 崩潰)

📦 27. java.lang.Object 的六個核心方法
  1. equals(Object obj):對象等價性比較(默認比較地址)
  2. hashCode():返回對象哈希碼(需與 equals 邏輯一致)
  3. toString():返回對象字符串表示(默認返回類名@地址)
  4. getClass():獲取對象的運行時類
  5. wait()/notify()/notifyAll():線程間通信(需在同步塊中使用)
  6. clone():創建并返回對象副本(需實現 Cloneable 接口)

重寫規范

@Override  
public boolean equals(Object o) {  if (this == o) return true;  if (o == null || getClass() != o.getClass()) return false;  User user = (User) o;  return Objects.equals(name, user.name);  
}  

🔑 28. 訪問權限修飾符對比
修飾符類內部同包不同包子類全局
private????
默認????
protected????
public????

類修飾規則

  • 外部類僅支持 public默認
  • 內部類可使用所有修飾符

🏗? 29. 繼承中的構造方法執行順序
  1. 子類構造隱式調用 super()
    class Parent {  Parent() { System.out.println("Parent構造"); }  
    }  
    class Child extends Parent {  Child() {  // 隱含 super();  System.out.println("Child構造");  }  
    }  
    // 輸出:Parent構造 → Child構造  
    
  2. 顯式調用父類構造
    Child(int age) {  super(age);  // 必須位于首行  System.out.println("Child帶參構造");  
    }  
    
  3. 多級繼承順序
    Object → 爺爺類 → 父類 → 子類

🆚 30. == vs equals()
操作符/方法比較內容示例
==基本類型:值10 == 10 → true
引用類型:內存地址new String("A") == "A" → false
equals()默認同 ==
重寫后按業務邏輯"A".equals(new String("A")) → true

重寫原則

  • 自反性:x.equals(x) = true
  • 對稱性:x.equals(y) = y.equals(x)
  • 傳遞性:x=y, y=z → x=z

🌀 31. Java多態詳解

三大條件

  1. 繼承關系(extendsimplements
  2. 子類重寫父類方法
  3. 父類引用指向子類對象:Animal dog = new Dog()

轉型示例

// 向上轉型(自動)  
Animal animal = new Dog();  
animal.eat();  // 調用Dog重寫的eat()  // 向下轉型(需顯式)  
if (animal instanceof Dog) {  Dog dog = (Dog) animal;  dog.bark();  
}  

優勢:代碼擴展性強(新增子類不影響父類邏輯)


🗑? 32. 垃圾回收機制(GC)

核心特性

  • 自動管理:JRE 后臺回收無用對象(java.lang.Object 未覆蓋時)
  • 回收區域:僅堆內存(不包含棧、方法區)
  • 不可預測性:無法精確控制 GC 執行時機

觸發時機

  • Eden 區滿觸發 Minor GC
  • 老年代滿觸發 Full GC
  • 手動建議:System.gc()(不保證立即執行)

對象復活

protected void finalize() {  this.reference = this; // ? 已廢棄,禁止使用  
}  

📦 33. 基本類型與包裝類
基本類型包裝類自動裝箱/拆箱
byteByteInteger i = 10; → 裝箱
intIntegerint n = i; → 拆箱
doubleDoubleDouble d = 3.14;

轉換場景

  1. 集合存儲:List<Integer> list = Arrays.asList(1, 2, 3);
  2. 類型轉換:int age = Integer.parseInt("25");
  3. 空值處理:Integer score = null;(基本類型不支持 null

🆚 34. Integer vs int
維度intInteger
類型基本類型包裝類
默認值0null
內存占用棧存儲(4字節)堆存儲(對象頭+引用)
比較== 比值== 比地址,equals 比值
緩存優化-128~127 緩存(IntegerCache

陷阱

Integer a = 100, b = 100;  
a == b; // true(緩存范圍內)  
Integer c = 200, d = 200;  
c == d; // false(超出緩存)  

📅 35. java.util.Date vs java.sql.Date
所屬包用途精度
java.util.Datejava.util通用日期時間毫秒級
java.sql.Datejava.sql數據庫日期(不含時間)到日(時間置零)

轉換示例

// util.Date → sql.Date  
java.util.Date utilDate = new java.util.Date();  
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());  // sql.Date → util.Date(自動向上轉型)  
java.util.Date date = sqlDate;  

📂 36. 遞歸遍歷目錄文件
void listFiles(File dir) {  File[] files = dir.listFiles();  if (files == null) return;  for (File file : files) {  if (file.isFile()) {  System.out.println("文件: " + file.getPath());  } else {  System.out.println("目錄: " + file.getPath());  listFiles(file); // 遞歸遍歷子目錄  }  }  
}  
// 調用: listFiles(new File("D:/Project"));  

優化:使用 Files.walk()(Java 8 NIO)替代遞歸


37. Java編譯輸出結果

題目:關于Java編譯,下面哪一個正確?
A. Java程序經編譯后產生machine code
B. Java程序經編譯后會生產byte code
C. Java程序經編譯后會產生DLL
D. 以上都不正確
答案:B
解析

  • Java是解釋型語言,編譯生成字節碼(byte code)(.class文件)而非機器碼。
  • DLL是C/C++編譯的動態鏈接庫,與Java無關。

38. 構造方法(Constructor)規則

題目:下列說法正確的有?
A. class中的construtor不可省略
B. construtor與class同名,但方法不能與class同名
C. construtor在一個對象被new時執行
D. 一個class只能定義一個construtor
答案:C
解析

  • A:類可省略構造方法(系統默認提供無參構造)。
  • B:方法名可與類名相同(不推薦,違反規范)。
  • D:類可定義多個構造方法(重載)。
  • C正確new創建對象時自動執行匹配的構造方法。

39. 接口修飾符

題目:Java中接口的修飾符可以為?
A. private
B. protected
C. final
D. abstract
答案:D
解析

  • 接口默認為abstract(可顯式聲明,通常省略)。
  • 禁止使用private/protected(僅支持public或默認包訪問)。
  • final會阻止接口被實現,違反接口設計目的。

40. 繼承中的構造方法執行順序

題目:以下代碼輸出什么?

class A {  public A() { System.out.println("A"); }  
}  
class B extends A {  public B() { System.out.println("B"); }  public static void main(String[] args) {  B b = new B();  }  
}  

答案:B(輸出AB)
解析

  • 子類構造方法隱式調用父類無參構造
  • 執行順序:父類構造 → 子類構造。

41. 關鍵字使用錯誤

題目:下列關于關鍵字的使用說法錯誤的是?
A. abstract不能與final并列修飾同一個類
B. abstract類中可以有private成員
C. abstract方法必須在abstract類中
D. static方法能處理非static屬性
答案:D
解析

  • D錯誤:static方法屬于類,無法直接訪問非static成員(需通過對象實例)。
  • A:final類禁止繼承,abstract類需被繼承,沖突。
  • B/C:抽象類可包含private屬性和抽象方法。

42. 內存回收機制

題目:下列哪些語句關于內存回收的說法正確?
A. 程序員必須創建一個線程來釋放內存
B. 內存回收程序負責釋放無用內存
C. 內存回收程序允許程序員直接釋放內存
D. 內存回收程序可以在指定時間釋放內存
答案:B
解析

  • B正確:GC自動回收無用對象內存。
  • A/C/D:程序員無法控制GC執行(僅能建議System.gc())。

43. 合法標識符

題目:選出合理的標識符?
A. _sysl_111
B. 2 mail
C. $change
D. class
答案:A、C
解析

  • 合法規則
    • 可包含字母、數字、_$
    • 不能以數字開頭(B錯誤)
    • 不能是關鍵字(D錯誤,class是關鍵字)

44. 正確說法

題目:下列說法正確的是?
A. java.lang.Cloneable是類
B. java.lang.Runnable是接口
C. Double對象在java.lang包中
D. Double a=1.0是正確的java語句
答案:B、C、D
解析

  • A:Cloneable是接口(標記接口)。
  • B:Runnable是接口(線程相關)。
  • C:Double包裝類在java.lang
  • D:自動裝箱(double→Double)。

45. 類聲明規則

題目:類名為"MyClass.java"的類可被工程中所有類訪問,正確聲明為?
A. private class MyClass
B. class MyClass extends Object
C. public class MyClass
D. public class MyClass extends Object
答案:C、D
解析

  • 全局訪問需public修飾(A/B默認包訪問)。
  • extends Object可省略(所有類默認繼承Object)。

46. 面向對象特征及生活案例

題目:面向對象的特征有哪些?舉例說明。
答案

  1. 封裝
    • 隱藏實現細節,暴露接口。
    • 例:汽車駕駛(無需了解發動機原理,通過方向盤/油門控制)。
  2. 繼承
    • 子類復用父類屬性和方法。
    • 例:電商系統——User為父類,Customer/Admin子類繼承基礎屬性。
  3. 多態
    • 同一接口不同實現。
    • 例:支付系統——Payment接口,Alipay/WeChatPay實現不同支付邏輯。

47. 內存泄漏 vs 內存溢出

題目:說明內存泄漏和內存溢出的區別及解決方案。
答案

類型內存泄漏(Memory Leak)內存溢出(OOM)
定義對象不再使用但未被GC回收內存不足無法分配新對象
原因長生命周期對象持有短生命周期對象引用內存泄漏積累或數據量過大
檢測工具VisualVM、MAT、JProfilerJVM參數-XX:+HeapDumpOnOutOfMemoryError生成堆轉儲
解決方案- 及時解引用(如List.clear()
- 避免靜態集合類濫用
- 使用弱引用(WeakReference
- 增加JVM內存
- 優化數據結構
- 分批次處理數據

48. Java序列化

題目:什么是Java序列化?如何實現?應用場景?
答案

  • 序列化:將對象狀態轉換為字節流(便于存儲/傳輸)。
  • 實現方式
    public class User implements Serializable {  private String name;  // 無需重寫方法(默認序列化)  
    }  
    // 序列化  
    try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.dat"))) {  oos.writeObject(user);  
    }  
    
  • 應用場景
    • 分布式系統傳輸對象(RPC框架如Dubbo)。
    • 緩存對象到硬盤(Redis持久化)。
    • HTTP Session存儲(Tomcat會話保存)。

49. 繞過構造方法創建對象

題目:不通過構造函數也能創建對象嗎?
答案可以,方式包括:

  1. 反射Class.newInstance()Constructor.newInstance()
  2. 克隆:實現Cloneable接口,調用clone()
  3. 反序列化ObjectInputStream.readObject()

注意:克隆和反序列化不會調用構造方法


50. 匿名內部類的繼承與實現

題目:匿名內部類可不可以繼承或實現接口?
答案

  • 可繼承類
    new Thread() {  @Override  public void run() { /* 重寫Thread方法 */ }  
    }.start();  
    
  • 可實現接口
    Runnable r = new Runnable() {  @Override  public void run() { /* 實現Runnable */ }  
    };  
    

限制

  • 匿名內部類不能顯式繼承和實現同時存在(隱式繼承Object)。
  • 無法定義構造方法(需通過實例初始化塊{}模擬)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86800.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86800.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86800.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小米手機安裝charles證書

使用紅米手機下載Charles證書一直下載中&#xff0c;無法正常下載。 不使用原裝瀏覽器&#xff0c;使用第三方瀏覽器下載就可以了。 使用第三方瀏覽器安裝&#xff0c;如我使用的是UC瀏覽器 使用第三方瀏覽器安裝的證書格式是".pem"格式問卷 將這個文件放入小米的dow…

DeepSeek R2 推遲發布:因 H20 算力短缺

DeepSeek 今年早些時候憑借其 R1 AI 模型備受廣泛關注。據《The Information》報道&#xff0c;R2 模型的工作似乎因 H20 處理器而停滯不前。 DeepSeek尚未透露其R2 模型的具體上市時間。 DeepSeek 使用 5 萬塊 Hopper GPU&#xff08;包括 3 萬塊 H20、1 萬塊 H800 和 1 萬塊…

智能之火,重塑創造:大模型如何點燃新一代開發引擎?

導言&#xff1a;普羅米修斯之火再現 在科技演進的長河中&#xff0c;每一次生產力的躍遷都伴隨著工具的質變。從蒸汽機轟鳴到電力普及&#xff0c;再到信息高速公路的鋪就&#xff0c;人類駕馭能量的能力不斷突破。今天&#xff0c;我們站在一個嶄新的臨界點上&#xff1a;大語…

一文入門JS

轉自個人博客 因為本人經常使用QML&#xff0c;而由于QML與JS之間的關系&#xff0c;本人經常使用到JS相關語法&#xff0c;所以在此系統性對JS基礎知識進行總結、記錄。 1. 入門 JavaScript&#xff08;簡稱 JS&#xff09;是一種廣泛應用于Web開發的腳本語言&#xff0c;它…

libtool: error: ‘/usr/.local/lib/libgmp.la‘ is not a valid libtool archive

背景&#xff1a; 安裝gcc時提示需要vc11&#xff0c;然后安裝gcc依賴gmp、mpfr、mpc。 到mpc make時出錯&#xff1a; libtool: error: ‘/usr/.local/lib/libgmp.la’ is not a valid libtool archive 詳細&#xff1a; /usr/bin/grep: /usr/.local/lib/libgmp.la: No such f…

HDC2025聚焦鴻蒙生態,FairGuard加固方案保駕護航

近日&#xff0c;在2025年華為開發者大會(HDC)上&#xff0c;華為正式啟動HarmonyOS 6開發者Beta&#xff0c;并全面展示一年多以來與合作伙伴共建鴻蒙生態的創新成果&#xff1a;“累計有9000多個應用參與了70多個系統級創新體驗的聯合打造&#xff0c;目前有3萬多鴻蒙應用和元…

GAN的思考及應用

一、對文獻的思考 CycleGAN的思考&#xff0c;前兩周看到了關于CycleGAN的原始論文&#xff0c;是用于處理圖像數據&#xff0c;有了如下思考&#xff1a; 1、基礎理論與方法 《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》是Cycle…

Xcode26新特性與iOS26適配指南

Xcode 26 新特性 在 WWDC25 上 Apple 推出了 Xcode 26,相比較 Xcode 16,它有如下的變化。 項目 安裝包更小,其他組件與工具鏈只有在需要時才會下載。設置界面重新設計,菜單從頂部挪到了左側,其中 Accounts 改名為 Apple Accounts,Text Editing 改名為 Editing,Key Bind…

閑庭信步使用SV搭建圖像測試平臺:第二十課——RGB圖像轉HSV圖像

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程文件請關注…

Django的CSRF保護機制

一、Django的CSRF保護機制 1. 核心原理 作用&#xff1a;防止跨站請求偽造&#xff08;CSRF&#xff09;攻擊&#xff0c;確保表單提交來源可信。實現方式&#xff1a; 在模板中使用{% csrf_token %}生成一個隱藏的<input>字段&#xff08;如csrfmiddlewaretoken&#…

JavaScript中的回調函數詳解

JavaScript中的回調函數詳解 1.1 概念 1.1.1 什么是回調函數 **回調函數&#xff08;Callback Function&#xff09;**是你將一個函數的引用&#xff08;指針&#xff09;作為參數傳遞給另一個函數&#xff0c;在那個函數完成任務后調用回來執行你傳遞的函數。簡單的來說就是…

Utils系列之內存池(Fixed size)

內存池核心介紹 廢話不多說&#xff0c;show you code. 我實現了兩套內存池&#xff0c;一個是固定大小的內存池&#xff0c;一個是多重不同大小的內存池。 Fixed size memory pool 設計思路&#xff1a; 我們一個個看&#xff0c;首先我們定義了一個chunk, chunk 里面包含…

ubuntu安裝docker遇到權限問題

問題現象&#xff1a; 使用snap安裝的docker&#xff0c;執行docker build命令構建景象時報錯&#xff1a; [] Building 0.1s (1/1) FINISHED docker:default > [internal] load build definition from Dockerfile 0.0s > > transferring dockerfile: 2B 0.0s ERROR:…

在Linux系統中部署Java項目

1.在Linux中啟動mysql的服務: systemctl start mysql可以采用以下代碼查看狀態: systemctl status mysql如下圖展示綠色代表啟動成功 2.之后進入mysql mysql -uroot -p輸入自己的密碼&#xff0c;這里的密碼不會顯示,直接輸入即可 3.在DG中連接Linux的數據庫 4.修改配置文件…

C++洛谷P1002 過河卒

題目 鏈接&#xff1a;https://www.luogu.com.cn/problem/P1002 解析 這道題適用于了解動態規劃的同學。 變量初始化 初始化B點坐標&#xff08;n, m&#xff09;和馬的坐標&#xff08;a, b&#xff09; 初始化方向數組和動態規劃數組 long long dp[30][30]; int dx[8] …

BlogX項目Go-gin--根據IP獲取地理位置

先定義一個函數來判斷IP地址是否為內網&#xff0c;歸為工具類 // utils/ip/enter.go package ipimport "net"func HasLocalIPAddr(ip string) bool {return HasLocalIP(net.ParseIP(ip)) }// HasLocalIP 檢測 IP 地址是否是內網地址 // 通過直接對比ip段范圍效率更…

鴻蒙系統(HarmonyOS)應用開發之實現瀑布流圖片展示效果

項目概述 科技圖庫是一款基于鴻蒙系統&#xff08;HarmonyOS&#xff09;開發的高品質圖片瀏覽應用&#xff0c;專注于展示精選科技主題圖片。應用采用現代化的瀑布流布局&#xff0c;為用戶提供流暢、直觀的瀏覽體驗&#xff0c;讓科技之美盡收眼底。 主要功能 1. 瀑布流布…

【fish-speech】新模型openaudio-s1-mini嘗鮮

一、配置 顯卡&#xff1a;v100&#xff08;測試簡短語句&#xff0c;顯存實際占用不足6G&#xff09; 二、安裝測試 1. 安裝 1.1 下載源碼 git clone https://github.com/fishaudio/fish-speech.git1.2 安裝系統組件 apt install portaudio19-dev libsox-dev ffmpeg1.3 …

介紹Windows下的由Sysinternals開發的一些小工具

Sysinternals是一個開發了很多Windows下系統工具的公司&#xff0c;這些工具能極大地提高對Windows系統的深入認知。就像它的名字Sys(tem)internals&#xff0c;深入系統里面。這些工具都放在微軟的網站上可以下載到。https://learn.microsoft.com/en-us/sysinternals/ 下載網…

云服務器環境下Linux系統epoll機制與高并發服務器優化實踐

在當今云計算時代&#xff0c;云已成為企業部署高并發服務的首選平臺。本文將深入探討Linux系統核心的epoll機制如何賦能云環境下的高并發服務器&#xff0c;解析其底層工作原理與性能優勢&#xff0c;并對比傳統IO復用模型的差異&#xff0c;幫助開發者構建更高效的云端服務架…