Java 基礎查漏補缺

1.深入解讀:JDK與JRE的區別

JDK提供了完整的Java開發工具和資源,包括編譯器、調試器和其他開發工具,滿足開發人員的各種需求。
JRE則相對更為基礎,它只提供了Java程序運行所需的環境,包含了Java虛擬機(JVM)和Java核心類庫,不包含開發工具。在部署Java應用程序時,只需要安裝JRE來運行程序即可。
JDK< JRE , 開發工具 >
JRE< JVM , 核心類庫 >

2.Java 中 boolean 占多少字節?

《Java 虛擬機規范》提議:
如果 boolean 是 “單獨使用”:boolean 被編譯為 int 類型,占 4 個字節
如果boolean 是以 “boolean 數組” 的形式使用:boolean 占 1 個字節,Java 虛擬機直接支持 boolean 數組,通過 newarray 指令創建 boolean 數組,然后通過 byte 數組指令 baload 和 bastore 來訪問和修改 boolean 數組。
但是,具體占用大小仍然取決于每個虛擬機的具體實現是否按照規范來

其他基本數據類型占用字節數
char:2B;
byte-short-int- long:1-2-4-8B;
float-double:4-8B

3.用最有效率的方法計算 2 乘以 8

2 << 3位運算,數字的二進制位左移三位相當于乘以 2 的三次方。

4.為什么重寫equals時必須重寫hashcode方法

Object 的 hashcode 方法是本地方法,該方法直接返回對象的內存地址。如果沒有重寫hashCode(),則任何對象的hashCode()值都不相等。如果只重寫equals沒有重寫hashCode(),就會導致相同的key值也被hashcode認為是不同的key值

5.為什么Java字符串是不可變的?有什么好處?

String 類被 final 關鍵字修飾,這就意味著沒有子類可以重寫它的方法。
String 類內部使用一個私有的字符數組來存儲字符串數據。這個字符數組在創建字符串時被初始化,之后不允許被改變。
好處
-保證 String 對象的安全性,避免被篡改;
-保證哈希值不會頻繁變更。以哈希表的鍵值來說,經常變更的話,哈希表的性能會下降。在 String 類中,哈希值是在第一次計算時緩存的,后續對該哈希值的請求將直接使用緩存值;
-實現字符串常量池,Java 會將相同內容的字符串存儲在字符串常量池中。這樣,具有相同內容的字符串變量可以指向同一個 String 對象,節省內存空間。

6.Integer類的緩存機制

IntegerCache: Integer 類內部中內置了 256 個 Integer 類型的緩存數據,數據范圍在 -128~127 之間。超過此范圍,要比較Integer對象的數值是否相等,應該使用equals方法,而不是==運算符。
.
通過 Integer.valueOf() 方法獲取整數對象時,會先檢查該整數是否在 IntegerCache 中,如果在,則返回緩存中的對象,否則創建一個新的對象并緩存起來。
如果使用 new Integer() 創建對象,即使值在 -128 到 127 范圍內,也不會被緩存,每次都會創建新的對象。【比如new Integer(10) == new Integer(10) :false】因此,推薦使用 Integer.valueOf() 方法獲取整數對象。
.
相關補充:String 轉成 Integer,主要有兩個方法:Integer.parseInt(String s)、Integer.valueOf(String s)

7.異常

Throwable 是 Java 語言中所有錯誤和異常的基類。它有兩個主要的子類:ErrorException
Error 類代表那些嚴重的錯誤,這類錯誤通常是程序無法處理的。比如,OutOfMemoryError 表示內存不足,StackOverflowError 表示棧溢出。這些錯誤通常與 JVM 的運行狀態有關,一旦發生,應用程序通常無法恢復。
Exception 類代表程序可以處理的異常。它分為兩大類:編譯時異常運行時異常
編譯時異常在編譯時必須被顯式處理(捕獲或聲明拋出),比如IOException、SQLException 等。
運行時異常在運行時拋出,通常是由程序邏輯錯誤導致的,如 NullPointerException、ArrayIndexOutOfBoundsException 等。

NoClassDefFoundError 和 ClassNotFoundException 有什么區別
它們都是由于系統運行時找不到要加載的類導致的,但是觸發的原因不一樣。
NoClassDefFoundError:當JVM在加載一個類的時候,這個類在編譯時是可用的,但是在運行時找不到這個類的定義。原因可能是 jar 包缺失或者調用了初始化失敗的類。
ClassNotFoundException:當應用程序運行的過程中嘗試使用類加載器去加載Class文件的時候,沒有在classpath中查找到指定的類。原因可能是要加載的類不存在或者類名寫錯了。

異常的處理主要有兩種方式:拋出(throw,throws)捕獲(try{} catch(){} finally{}
throw 和 throws 的區別
1)throws 關鍵字用于聲明異常;而 throw 關鍵字用于顯式的拋出異常。
2)throws 關鍵字后面跟的是異常的名字;而 throw 關鍵字后面跟的是異常的對象。
3)throws 關鍵字出現在方法簽名上,而 throw 關鍵字出現在方法體里。
4)throws 關鍵字在聲明異常的時候可以跟多個,用逗號隔開;而 throw 關鍵字每次只能拋出一個異常。

try 里的 return 先執行還是 finally 先執行?
finally 先執行。但是,在執行 finally 之前,JVM 會先將 return 的結果暫存起來,即使 finally 修改了 return 的變量值,返回值也不會改變。

8.BIO、NIO、AIO

BIO(Blocking I/O):阻塞 I/O,基于流模型。線程在執行 I/O 操作時被阻塞,無法處理其他任務,適用于連接數較少的場景。
NIO(New I/O 或 Non-blocking I/O):非阻塞 I/O ,基于通道和緩沖區。線程在等待 I/O 時可執行其他任務,適用于連接數多但連接時間短的場景。NIO 的魅力主要體現在網絡編程中,服務器可以用一個線程處理多個客戶端連接,通過 Selector 監聽多個 Channel 來實現多路復用,極大地提高了網絡編程的性能。
AIO(Asynchronous I/O):異步 I/O ,引入了異步通道的概念,基于事件和回調機制。線程發起 I/O 請求后立即返回,當 I/O 操作完成時通過回調函數通知線程,適用于連接數多且連接時間長的場景。

補充:既然有了字節流,為什么還要有字符流?
其實字符流是由 Java 虛擬機將字節轉換得到的,問題就在于這個過程比較耗時,并且,如果我們不知道編碼類型就很容易出現亂碼問題。所以, I/O 流就干脆提供了一個直接操作字符的接口。
在計算機中,文本和視頻都是按照字節存儲的,只是如果是文本文件的話,我們可以通過字符流的形式去讀取,這樣更方面的我們進行直接處理。

9.序列化和反序列化

serialVersionUID 是標識類版本的唯一標識符,確保在序列化和反序列化過程中類的版本是兼容的;
Serializable接口用于標記一個類可以被序列化;
序列化只會保存對象的狀態,因此不包含靜態變量
可以使用 transient 關鍵字修飾不想序列化的變量;

10.Java反射

反射就是在運行時才知道要操作的類是什么,并且可以在運行時獲取類的完整構造,并調用對應的方法
反射的原理:Java 程序的執行分為編譯和運行兩步,編譯之后會生成字節碼(.class)文件,JVM 進行類加載的時候,會加載字節碼文件,將類型相關的所有信息加載進方法區,反射就是去獲取這些信息,然后進行各種操作。

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

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

相關文章

數字類型<整數、復數>

Python 中&#xff0c;數字類型 Number&#xff0c; 包括整數 int、浮點 float 數和復數 complex 三個子類型。 用來表示程序中不同的數字類型的數據。 整數 整數類型&#xff1a;用來表示整數數值&#xff0c;即沒有小數部分的數值&#xff0c;在 Python 中&#xff0c;沒有…

Nettyの網絡聊天室擴展序列化算法

1、網絡聊天室綜合案例 客戶端初始代碼&#xff1a; Slf4j public class ChatClient {public static void main(String[] args) {NioEventLoopGroup group new NioEventLoopGroup();LoggingHandler LOGGING_HANDLER new LoggingHandler(LogLevel.DEBUG);MessageCodecSharabl…

使用c++函數式編程實現Qt信號槽機制

問題背景 在下面的代碼中&#xff0c;Input輸入器 輸入數據&#xff0c;希望A和B 接收數據。但使用的賦值&#xff0c;導致in.a和a只是拷貝數據&#xff0c;而不是同一個對象&#xff0c;使得數據不同步。 #include <iostream> struct A {int age 32; }; struct B {int …

searchForm自適應布局 + 按鈕插槽

收起 展開 代碼&#xff1a; useResizeObserverHooks.js import { useEffect, useLayoutEffect } from "react";export const useResizeObserver (containerDom, domClass, callback) > {useLayoutEffect(() > {let resizeObserver null;let dom null;if …

Qt Json詳細介紹

一.概念介紹 JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;常用于前后端數據傳輸和存儲。它具有以下特點&#xff1a; 易讀性&#xff1a;JSON 使用人類可讀的文本格式表示數據&#xff0c;采用鍵值對的方式組織數據&#x…

eth0設備繁忙

當您遇到 ifconfig eth0 hw ether 20:24:07:04:18:00 命令執行后顯示 ifconfig: SIOCSIFHWADDR: Device or resource busy 錯誤時&#xff0c;這意味著您嘗試更改的網絡設備&#xff08;在這個例子中是 eth0&#xff09;目前正被占用&#xff0c;無法進行硬件地址的更改。 為了…

Map Set(Java篇詳解)

&#x1f341; 個人主頁&#xff1a;愛編程的Tom&#x1f4ab; 本篇博文收錄專欄&#xff1a;Java專欄&#x1f449; 目前其它專欄&#xff1a;c系列小游戲 c語言系列--萬物的開始_ 等 &#x1f389; 歡迎 &#x1f44d;點贊?評論?收藏&#x1f496;三連支持…

【每日一練】python列表

1、輸入一個整數列表&#xff0c;將列表中的元素按照逆序輸出。 list1[5,4,5,6] list1.reverse() print(list1)[6, 5, 4, 5]2、輸入一個字符串列表&#xff0c;輸出其中長度大于等于5的字符串&#xff0c;并且將它們轉換為大寫形式。 list1[hello,lol,ak47,aliang] for i in …

211.xv6——3(page tables)

在本實驗室中&#xff0c;您將探索頁表并對其進行修改&#xff0c;以簡化將數據從用戶空間復制到內核空間的函數。 開始編碼之前&#xff0c;請閱讀xv6手冊的第3章和相關文件&#xff1a; kernel/memlayout.h&#xff0c;它捕獲了內存的布局。kernel/vm.c&#xff0c;其中包含…

代謝組數據分析(十二):嶺回歸、Lasso回歸、彈性網絡回歸構建預測模型

歡迎大家關注全網生信學習者系列: WX公zhong號:生信學習者Xiao hong書:生信學習者知hu:生信學習者CDSN:生信學習者2介紹 在代謝物預測模型的構建中,我們采用了三種主流的回歸分析方法:嶺回歸、Lasso回歸以及彈性網絡回歸。這三種方法各有其獨特的原理和適用場景,因此在…

WPS操作技巧:制作可以打對勾的方框,只需簡單幾步!沈陽wps辦公軟件培訓

日常工作中&#xff0c;我們經常需要在表格中添加復選框&#xff0c;比如【性別選擇】、【任務完成狀態】等等&#xff0c;通過打對勾來確定狀態。今天就分別從WPS的Excel表格和Word文檔2種場景&#xff0c;介紹制作可以打對勾的復選框的方法技巧&#xff0c;掌握技巧&#xff…

25、PHP 實現兩個鏈表的第一個公共結點(含源碼)

題目&#xff1a; PHP 實現兩個鏈表的第一個公共結點 描述&#xff1a; 輸入兩個鏈表&#xff0c;找出它們的第一個公共結點。 <?php /*class ListNode{var $val;var $next NULL;function __construct($x){$this->val $x;} }*/ function FindFirstCommonNode($pHead…

構建zdppy docker鏡像

拉取鏡像 docker pull python:3.8-alpine3.19創建容器 docker run -itd --name zdppy python:3.8-alpine3.19 sh進入容器 docker exec -it zdppy sh配置pip國內源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple提交容器為鏡像 docker commit…

游戲AI的創造思路-技術基礎-計算機視覺

讓游戲的AI具備“眼睛”和“視覺”&#xff0c;就是通過計算機視覺的方法進行的。現在&#xff0c;越來越多的游戲&#xff0c;特別是動捕類游戲都在使用這個方法。當然&#xff0c;計算機視覺不僅僅用于游戲&#xff0c;越來越多的應用使用到這個技術 目錄 1. 定義 2. 發展歷…

spring 枚舉、策略模式、InitializingBean初使化組合使用示例

實現一個簡單的文本處理系統。 在這個系統中&#xff0c;我們將定義不同類型的文本處理策略&#xff0c;比如大小寫轉換、添加前綴后綴等&#xff0c;并使用工廠模式來管理這些策略。 1 定義一個枚舉來標識不同的文本處理類型 public enum TextProcessTypeEnum {UPPER_CASE,LO…

騰訊混元文生圖開源模型推出小顯存版本,6G顯存即可運行,并開源caption模型

7月4日&#xff0c;騰訊混元文生圖大模型&#xff08;混元DiT&#xff09;宣布開源小顯存版本&#xff0c;僅需6G顯存即可運行&#xff0c;對使用個人電腦本地部署的開發者十分友好&#xff0c;該版本與LoRA、ControlNet等插件&#xff0c;都已適配至Diffusers庫&#xff1b;并…

探索 Apache Paimon 在阿里智能引擎的應用場景

摘要&#xff1a;本文整理自Apache Yarn && Flink Contributor&#xff0c;阿里巴巴智能引擎事業部技術專家王偉駿&#xff08;鴻歷&#xff09;老師在 5月16日 Streaming Lakehouse Meetup Online 上的分享。內容主要分為以下三個部分&#xff1a; 一、 阿里智能引擎…

【LeetCode】全排列

目錄 一、題目二、解法完整代碼 一、題目 給定一個不含重復數字的數組 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意順序 返回答案。 示例 1&#xff1a; 輸入&#xff1a;nums [1,2,3] 輸出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] …

LVS+Nginx高可用集群--基礎篇

1.集群概述 單體部署&#xff1a; 可以將上面內容分別部署在不同的服務器上。 單體架構的優點&#xff1a; 小團隊成型就可完成開發&#xff0c;測試&#xff0c;上線 迭代周期短&#xff0c;速度快 打包方便&#xff0c;運維簡單 單體架構的挑戰&#xff1a;單節點宕機造成…

DVWA sql手注學習(巨詳細不含sqlmap)

這篇文章主要記錄學習sql注入的過程中遇到的問題已經一點學習感悟&#xff0c;過程圖片會比較多&#xff0c;比較基礎和詳細&#xff0c;不存在看不懂哪一步的過程 文章目錄 靶場介紹SQL注入 lowSQL注入 MediumSQL注入 HighSQL注入 Impossible 靶場介紹 DVWA&#xff08;Damn…