JavaSE高級-01

文章目錄

  • 1. 異常
    • 異常的分類
    • 自定義異常
    • 異常的處理
    • 資源關閉:try-with-resource
  • 2. 泛型
    • 泛型類
    • 泛型接口
    • 泛型方法、通配符、上下限
    • 通配符
    • 泛型的上下限
    • 泛型支持的類型
  • 3. 包裝類
  • 4. Collection集合和Map集合
    • 4.1 Collection集合
      • Collection集合特點
      • Collection的遍歷方式一:迭代器遍歷
      • Collection的遍歷方式二:增強for循環
      • Collection集合的遍歷方式三:Lambda表達式
      • 解決并發修改異常問題的方案
    • 4.2 List集合
      • 4.2.1 ArrayList的底層原理
      • 4.2.2 LinkedList的底層原理
    • 4.3 Set集合
      • 4.3.1 HashSet集合的底層原理
      • 4.3.2 LinkedHashSet集合的底層原理
      • 4.3.3 TreeSet集合的底層原理
    • 4.4 Collection集合總結
  • 5. Map集合
    • 5.1 HashMap集合的底層原理
    • 5.2 LinkedHashMap集合的原理
    • 5.3 TreeMap集合的原理
  • 6. File、字符集和IO流
    • 6.1 File
    • 6.2 字符集
      • 標準ASCII字符集
      • GBK(漢字內碼擴展規范,國標)
      • Unicode字符集(統一碼,也叫萬國碼)
      • UTF-8
      • 總結
      • 編碼、解碼
    • 6.3 IO流
      • IO流的分類
      • 緩沖流
      • 字符輸入轉換流
      • 打印流
      • 特殊數據流
    • 6.4 IO框架
      • Commons-io框架(commons-io-2.6.jar)

1. 異常

在這里插入圖片描述

異常的分類

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

自定義異常

在這里插入圖片描述

異常的處理

兩種處理方式:
在這里插入圖片描述

資源關閉:try-with-resource

JDK 7開始提供了更簡單的資源釋放方案:try-with-resource。

try (定義資源1;定義資源2;…){可能出現異常的代碼;
} catch (異常類名 變量名){異常的處理代碼;
} 

該資源使用完畢后,會自動調用其 close() 方法,完成對資源的釋放!
在這里插入圖片描述

2. 泛型

定義類、接口、方法時,同時聲明了一個或者多個類型變量(如:E、T、K、V)稱為泛型類、泛型接口,泛型方法、它們統稱為泛型。

作用:泛型提供了在編譯階段約束所能操作的數據類型,并自動進行檢查的能力!這樣可以避免強制類型轉換,及其可能出現的異常。

泛型類

##形如:
修飾符 class 類名<類型變量,類型變量,…> { 
}##例如:
public class ArrayList<E>{. . .
}

泛型接口

##形如:
修飾符 interface 接口名<類型變量,類型變量,…> { 
}##例如:
public interface A<E>{. . .
}

泛型方法、通配符、上下限

##形如:
修飾符 <類型變量,類型變量,…>  返回值類型 方法名(形參列表) { 
}##例如:
public static <T> void test(T t){. . .
}

在這里插入圖片描述

通配符

就是 “?” ,可以在“使用泛型”的時候代表一切類型; E T K V 是在定義泛型的時候使用。

泛型的上下限

  • 泛型上限(? extends Car)? 能接收的必須是Car或者其子類。
  • 泛型下限(? super Car)? 能接收的必須是Car或者其父類。

泛型支持的類型

泛型不支持基本數據類型,只能支持對象類型(引用數據類型)。

3. 包裝類

在這里插入圖片描述
自動裝箱:基本數據類型可以自動轉換為包裝類型。
自動拆箱:包裝類型可以自動轉換為基本數據類型。

4. Collection集合和Map集合

在這里插入圖片描述
Collection是單列集合的祖宗,它規定的方法(功能)是全部單列集合都會繼承的。
在這里插入圖片描述

4.1 Collection集合

Collection集合特點

在這里插入圖片描述在這里插入圖片描述

Collection的遍歷方式一:迭代器遍歷

迭代器是用來遍歷集合的專用方式(數組沒有迭代器),在Java中迭代器的代表是Iterator。
在這里插入圖片描述

Iterator<String> it = lists.iterator();
while(it.hasNext()){String ele = it.next();System.out.println(ele);
}

Collection的遍歷方式二:增強for循環

增強 for 可以用來遍歷集合或者數組。
增強 for 遍歷集合,本質就是迭代器遍歷集合的簡化寫法。

Collection<String> c = new ArrayList<>();
for(String s : c) {System.out.println(s);
}

Collection集合的遍歷方式三:Lambda表達式

得益于JDK 8開始的新技術Lambda表達式,提供了一種更簡單、更直接的方式來遍歷集合。
在這里插入圖片描述

lists.forEach(s -> {System.out.println(s);
});
##  
lists.forEach(s -> System.out.println(s));

解決并發修改異常問題的方案

在這里插入圖片描述

4.2 List集合

在這里插入圖片描述在這里插入圖片描述

4.2.1 ArrayList的底層原理

在這里插入圖片描述

4.2.2 LinkedList的底層原理

LinkedList底層是基于鏈表存儲數據的。
鏈表中的數據是一個一個獨立的結點組成的,結點在內存中是不連續的,每個結點包含數據值和下一個結點的地址。

鏈表的特點:

  • 特點1查詢慢,無論查詢哪個數據都要從頭開始找。
  • 特點2:鏈表增刪相對快。
  • 特點3:基于雙鏈表實現的。(對首尾元素進行增刪改查的速度是極快的)

LinkedList的應用場景之一:可以用來設計隊列

// 目標:用LinkedList做一個隊列對象。
LinkedList<String> queue = new LinkedList<>();
// 入隊
queue.addLast("趙敏");
queue.addLast("西門吹雪");
queue.addLast("陸小鳳");
queue.addLast("石觀音");
System.out.println(queue); // [趙敏, 西門吹雪, 陸小鳳, 石觀音]// 出隊
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);

LinkedList的應用場景之二:可以用來設計棧

// 做一個棧
LinkedList<String> stack = new LinkedList<>();
// 壓棧
stack.push("第1顆子彈");
stack.push("第2顆子彈");
stack.push("第3顆子彈");
stack.push("第4顆子彈");
System.out.println(stack);  // [第4顆子彈, 第3顆子彈, 第2顆子彈, 第1顆子彈]// 出棧
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack);

4.3 Set集合

Set集合特點
在這里插入圖片描述
在這里插入圖片描述

4.3.1 HashSet集合的底層原理

HashSet基于哈希表存儲數據的。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

4.3.2 LinkedHashSet集合的底層原理

在這里插入圖片描述

4.3.3 TreeSet集合的底層原理

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述在這里插入圖片描述

4.4 Collection集合總結

在這里插入圖片描述

5. Map集合

Map是雙列集合的祖宗,它的功能是全部雙列集合都可以繼承過來使用的。
在這里插入圖片描述
在這里插入圖片描述
常用方法
在這里插入圖片描述

5.1 HashMap集合的底層原理

HashMap用的最多,HashMap跟HashSet的底層原理是一模一樣的,都是基于哈希表實現的。
在這里插入圖片描述

5.2 LinkedHashMap集合的原理

在這里插入圖片描述

5.3 TreeMap集合的原理

在這里插入圖片描述
在這里插入圖片描述

6. File、字符集和IO流

在這里插入圖片描述

File是java.io.包下的類, File類的對象,用于代表當前操作系統的文件(可以是文件、或文件夾),不能讀寫文件里面存儲的數據。

IO流用于讀寫數據的(可以讀寫文件,或網絡中的數據…)。

6.1 File

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
File提供的判斷文件類型、獲取文件信息功能
在這里插入圖片描述
File提供的創建和刪除文件的方法
在這里插入圖片描述File提供的遍歷文件夾的方法

在這里插入圖片描述

6.2 字符集

標準ASCII字符集

在這里插入圖片描述

GBK(漢字內碼擴展規范,國標)

在這里插入圖片描述

Unicode字符集(統一碼,也叫萬國碼)

在這里插入圖片描述

UTF-8

在這里插入圖片描述

總結

在這里插入圖片描述
注意1:字符編碼時使用的字符集,和解碼時使用的字符集必須一致,否則會出現亂碼。
注意2:英文,數字一般不會亂碼,因為很多字符集都兼容了ASCII編碼。

編碼、解碼

在這里插入圖片描述

6.3 IO流

IO流的分類

在這里插入圖片描述
在這里插入圖片描述

緩沖流

在這里插入圖片描述
BufferedInputStream緩沖字節輸入流、BufferedOutputStream緩沖字節輸出流
在這里插入圖片描述
在這里插入圖片描述
BufferedReader緩沖字符輸入流
在這里插入圖片描述
在這里插入圖片描述
BufferedWriter緩沖字符輸出流
在這里插入圖片描述
在這里插入圖片描述

字符輸入轉換流

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

打印流

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

特殊數據流

在這里插入圖片描述
DataOutputStream(數據輸出流)
在這里插入圖片描述
DataInputStream(數據輸入流)
在這里插入圖片描述

6.4 IO框架

封裝了Java提供的對文件、數據進行操作的代碼,對外提供了更簡單的方式來對文件進行操作,對數據進行讀寫等。

Commons-io框架(commons-io-2.6.jar)

在這里插入圖片描述

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

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

相關文章

MyBatis執行器與ORM特性深度解析

一、MyBatis的Executor執行器詳解1. MyBatis執行器類型MyBatis有三種核心執行器實現&#xff0c;在org.apache.ibatis.executor包中定義&#xff1a;執行器類型特點描述SimpleExecutor默認執行器&#xff0c;每次執行都會創建新的Statement對象ReuseExecutor重用預處理語句(Pre…

紅黑樹的特性與實現

在數據結構領域&#xff0c;二叉搜索樹&#xff08;BST&#xff09;憑借 O (log n) 的平均時間復雜度成為查找、插入和刪除操作的優選結構。但它有個致命缺陷&#xff1a;當輸入數據有序時&#xff0c;會退化為鏈表&#xff0c;時間復雜度驟降至 O (n)。為解決這一問題&#xf…

ClickHouse從入門到企業級實戰全解析課程簡介

【課程簡介】你是否正在面臨這些挑戰&#xff1f;海量數據的分析查詢慢如蝸牛&#xff0c;報表一等就是幾小時&#xff1f;想構建實時數倉&#xff0c;卻不知如何高效處理 Kafka 等流式數據&#xff1f;對 ClickHouse 的眾多 MergeTree 引擎感到困惑&#xff0c;不知如何選型&a…

【新啟航】從人工偏差到機械精度:旋轉治具讓三維掃描重構數據重復精度提升至 ±0.01mm

在三維掃描重構領域&#xff0c;傳統人工操作方式受限于人為因素干擾&#xff0c;數據重復精度難以保證&#xff0c;無法滿足高精度工業檢測與逆向工程需求。旋轉治具憑借先進的機械設計與自動化控制技術&#xff0c;將三維掃描重構數據重復精度提升至 0.01mm&#xff0c;實現從…

《匯編語言:基于X86處理器》第13章 復習題和編程練習

本篇記錄了《匯編語言&#xff1a;基于X86處理器》第13章 復習題和編程練習的學習筆記。13.6 復習題1.當匯編過程被高級語言程序調用時&#xff0c;主調程序與被調過程是否應使用相同的內存模式?答&#xff1a;主調程序與被調過程使用的內存模式必須相同。2.C 和 C程序調用匯編…

SpringAI智能航空助手實戰<Demo>

我們將如何將我們得傳統業務進行智能化的改造>>>1.將我們傳統的航空票務系統 我們之前通過按鈕的方式來完成 現在我們通過智能對話的方式完成 >現在我們通過對話的方式來完成 整個智能化的改造 傳統應用如何進行智能化改造 我們把我們的項目通過Spring-ai 來接入A…

windows git安裝步驟

1&#xff0c;從官網下載安裝包&#xff1a;gitg官網 進行安裝 2&#xff0c;配置git環境&#xff1a; git config --global user.name "Your Name" git config --global user.email "Your Email"3&#xff0c;生成 SSH Key&#xff1a; ssh-keygen -t r…

使用chroma和LlamaIndex做RAG增強

RAG 原理&#xff1a;通過 “檢索&#xff08;從知識庫獲取相關信息&#xff09;→ 增強&#xff08;將信息作為上下文輸入模型&#xff09;→ 生成&#xff08;模型基于上下文回答&#xff09;” 三步&#xff0c;解決大模型知識時效性、領域局限性問題。 接下來將完成這么一個…

2025 最應避免的攝影陷阱以及解決方案

你有沒有想過&#xff0c;當你拍完了一個完美的場景后&#xff0c;卻發現畫面模糊、光線不足&#xff0c;或者更糟的是&#xff0c;存儲卡中的文件丟失了&#xff1f;這些問題可能會發生在任何人身上&#xff0c;無論是業余愛好者、專業人士還是最好的攝影師。當珍貴的記憶變成…

python類--python011

面向對象編程中的類的概念、屬性使用、繼承和類的改造問題等。7.1 初識類在軟件編程中&#xff0c;面向過程和面向對象是兩種主要的編程方法。面向過程的編程強調通過函數來實現特定的功能&#xff0c;具有靈活性&#xff0c;但在復雜系統中往往導致代碼重復&#xff0c;維護困…

Python函數篇:從零到精通

一、函數1.1 為什么有函數我們對于一個項目時&#xff0c;會有上千甚至上萬條代碼&#xff0c;當我們要使用到某個函數時&#xff0c;例如我需要計算一個求和代碼&#xff0c;獲得求和的值來服務我們的項目&#xff0c;那我們可能會這樣#計算1&#xff5e;100的和 theSun 0 fo…

QT項目之記事本

本文用QT實現記事本功能。一、成品展示1.界面主要元素&#xff1a;1.標題為MyNoteBook&#xff1b;2.相應圖標為&#xff1a;打開文件&#xff0c;保存&#xff0c;退出&#xff1b;3.右下角標注光標所在行列&#xff0c;默認編碼方式為UTF-8&#xff1b;4.鼠標所在圖標位置時會…

【軟件測試】性能測試 —— 工具篇 JMeter 介紹與使用

&#x1f970;&#x1f970;&#x1f970;來都來了&#xff0c;不妨點個關注叭&#xff01; &#x1f449;博客主頁&#xff1a;歡迎各位大佬!&#x1f448; 文章目錄1. JMeter 的介紹2. JMeter 安裝、配置、搭建2.1 前置條件 —— Java環境搭建2.2 JMeter 下載2.3 JMeter 安裝…

二十二、Mybatis-快速入門程序

入門程序大概步驟敘述&#xff1a; 步驟一&#xff1a;創建springboot工程并且數據庫提前創建表步驟二&#xff1a;創建springboot工程對Mybatis相關依賴注意打勾步驟三&#xff1a;編寫查找方法步驟四&#xff1a;編寫測試方法項目目錄結構與數據庫以及代碼&#xff1a; 項目目…

Blender模擬結構光3D Scanner(一)外參數匹配

如何使用Blender模擬FPP(Fringe Projection Profilometry) 原理的結構光3D傳感器&#xff1f;主要包含的工作有&#xff1a;1&#xff09;相機、投影儀定位與內外參數匹配&#xff1b;2&#xff09;投影儀投射指定Pattern圖像&#xff1b;3&#xff09;被測物體材質屬性配置等&…

LangChain是如何實現RAG多輪問答的

目錄引言一、LangChain實現RAG多輪問答核心機制1. 對話歷史管理&#xff08;Memory&#xff09;2. 問題重寫&#xff08;Query Rewriting&#xff09;3. 檢索增強生成&#xff08;RAG Core&#xff09;4. 鏈式工作流&#xff08;Chain&#xff09;二、關鍵設計特點三、完整示例…

DAY 44 預訓練模型

知識點回顧&#xff1a; 預訓練的概念常見的分類預訓練模型圖像預訓練模型的發展史預訓練的策略預訓練代碼實戰&#xff1a;resnet18 一、預訓練的概念 我們之前在訓練中發現&#xff0c;準確率最開始隨著epoch的增加而增加。隨著循環的更新&#xff0c;參數在不斷發生更新。 所…

Java Stream API 中常用方法復習及項目實戰示例

在最近的練手項目中&#xff0c;對于stream流的操作愈加頻繁&#xff0c;我也越來越感覺stream流在處理數據是的干凈利落&#xff0c;因此寫博客用來記錄最近常用的方法以便于未來的復習。map() 方法map()是一個中間操作&#xff08;intermediate operation&#xff09;&#x…

從零開始手搓一個GPT大語言模型:從理論到實踐的完整指南(一)

現在人工智能飛速發展時代&#xff0c;LLM絕對可以算是人工智能領域得一顆明珠&#xff0c;也是現在許多AI項目落地得必不可少得一個模塊&#xff0c;可以說&#xff0c;不管你之前得研究領域是AI得哪個方向&#xff0c;現在都需要會一些LLM基礎&#xff0c;在這個系列&#xf…

Redis ubuntu下載Redis的C++客戶端

1. 安裝 redis-plus-plus C 操作 Redis 的庫有很多&#xff0c;這里選擇使用 redis-plus-plus&#xff0c;這個庫的功能強大&#xff0c;使用簡單。 Github 地址&#xff1a;GitHub - sewenew/redis-plus-plus: Redis client written in C 訪問不了Github 地址的可以使用Ste…