3月26日 Java学习笔记
一、Java异常处理
- 异常概述
异常是指程序运行过程中出现的不正常情况。
Java中异常是通过类来表示的,所有异常类都是Throwable类的子类。
异常分为两大类:Error(错误)和Exception(异常)。
Error:通常表示不可恢复的严重问题,如虚拟机错误,一般应用程序不需要处理。
Exception:表示可以被程序处理的异常,又分为RuntimeException(运行时异常)和非运行时异常(检查型异常)。运行时异常通常由程序设计错误导致,如空指针异常、数组越界异常等;非运行时异常则需要显式处理,如IOException。 - 异常处理机制
try-catch-finally
try块:放置可能出现异常的代码。
catch块:捕获并处理异常,可以有多个catch块,按从子类到父类的顺序排列。
finally块:无论是否发生异常都会执行,常用于释放资源。
java
复制
try {
// 可能出现异常的代码
} catch (ExceptionType1 e1) {
// 处理ExceptionType1异常
} catch (ExceptionType2 e2) {
// 处理ExceptionType2异常
} finally {
// 释放资源等操作
}
throws声明
在方法声明中使用throws关键字声明可能抛出的异常,将异常处理责任交给调用者。
java
复制
public void methodName() throws ExceptionType1, ExceptionType2 {
// 可能抛出异常的代码
}
自定义异常
通过继承Exception类或RuntimeException类来创建自定义异常类,用于表示特定业务逻辑中的异常情况。
java
复制
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
} - 异常处理原则
捕获异常时应尽量具体,避免使用过于宽泛的catch(Exception e)。
对于可恢复的异常,应尽量进行恢复操作;对于不可恢复的异常,可记录日志以便后续分析。
使用finally块释放资源时,注意避免finally块中的代码覆盖返回值等问题。
二、Java集合框架 - 集合框架概述
Java集合框架是一组用于存储和操作一组对象的接口和类,提供了高效的集合操作方式。
主要接口包括Collection、List、Set、Map等,常见的实现类有ArrayList、LinkedList、HashSet、HashMap等。 - List接口
List是一个有序集合,可以包含重复元素,元素有索引。
常用实现类:
ArrayList:基于动态数组实现,随机访问效率高,增删元素效率低,线程不安全。
LinkedList:基于双向链表实现,增删元素效率高,随机访问效率低,线程不安全。
java
复制
// ArrayList示例
ListarrayList = new ArrayList<>();
arrayList.add("元素1");
arrayList.add("元素2");
String element = arrayList.get(0);
// LinkedList示例
List
linkedList.add("元素A");
linkedList.add("元素B");
String element = linkedList.get(0);
3. Set接口
Set是一个不允许重复元素的集合,元素无序。
常用实现类:
HashSet:基于哈希表实现,元素无序,线程不安全。
TreeSet:基于红黑树实现,元素有序,线程不安全。
java
复制
// HashSet示例
Set
hashSet.add("元素X");
hashSet.add("元素Y");
// TreeSet示例
Set
treeSet.add("元素M");
treeSet.add("元素N");
4. Map接口
Map是一个存储键值对的集合,键唯一,值可以重复。
常用实现类:
HashMap:基于哈希表实现,线程不安全,允许一个null键和多个null值。
TreeMap:基于红黑树实现,键有序,线程不安全。
java
复制
// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("键1", 100);
hashMap.put("键2", 200);
int value = hashMap.get("键1");
// TreeMap示例
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("键A", 300);
treeMap.put("键B", 400);
int value = treeMap.get("键A");
浙公网安备 33010602011771号