文章目錄
- 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提供的對文件、數據進行操作的代碼,對外提供了更簡單的方式來對文件進行操作,對數據進行讀寫等。