文章目录
- 一、异常的基本概念
-
- [1.1 什么是异常](#1.1 什么是异常)
- [1.2 异常的分类](#1.2 异常的分类)
- 三、异常处理关键字
- 四、try-catch-finally语句
-
- [4.1 try-catch语句](#4.1 try-catch语句)
- [4.2 finally语句](#4.2 finally语句)
- 五、throws与throw关键字
-
- [5.1 throws关键字](#5.1 throws关键字)
- [5.2 throw关键字](#5.2 throw关键字)
- 六、自定义异常
-
- [6.1 自定义异常类](#6.1 自定义异常类)
- [6.2 使用自定义异常](#6.2 使用自定义异常)
一、异常的基本概念
1.1 什么是异常
- 定义:异常是指Java程序在运行时可能出现的错误或非正常情况,例如尝试访问不存在的文件或进行除零操作。
- 异常类:Java中的所有异常都是
Throwable类
的子类,主要分为两大类:Error
和Exception
。
1.2 异常的分类
编译时异常(checked exception):
- 定义:编译时异常是在编译期间被检查的异常,需要显式处理。
- 常见类型:IOException, SQLException 等。
运行时异常(unchecked exception):
- 定义:运行时异常是在程序运行时发生的异常,编译器不会检查。
- 常见类型:NullPointerException, ArrayIndexOutOfBoundsException 等。
三、异常处理关键字
- try:用于包裹可能抛出异常的代码块。
- catch:用于捕获并处理特定类型的异常。
- finally:无论是否发生异常,都会执行的代码块。
- throw:用于主动抛出异常。
- throws:用于声明方法可能抛出的异常类型。
四、try-catch-finally语句
4.1 try-catch语句
- 作用:捕获并处理异常。
语法:
java
try {
// 可能抛出异常的代码
} catch (异常类型 异常变量名) {
// 异常处理代码
}
代码示例:
java
try {
int[] array = new int[3];
System.out.println(array[3]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("捕获到数组越界异常: " + e.getMessage());
}
4.2 finally语句
- 作用:无论是否捕获到异常,都会执行的清理代码块。
语法:
java
try {
// 可能抛出异常的代码
} catch (异常类型 异常变量名) {
// 异常处理代码
} finally {
// 总会执行的代码
}
代码示例:
java
try {
System.out.println("尝试执行某个操作");
throw new RuntimeException("发生了错误");
} catch (RuntimeException e) {
System.out.println("捕获到异常: " + e.getMessage());
} finally {
System.out.println("这段代码总是会执行");
}
五、throws与throw关键字
5.1 throws关键字
- 作用:声明方法可能抛出的异常,让调用者来处理。
语法:
java
public void 方法名() throws 异常类型1, 异常类型2 {
// 方法体,可能抛出异常
}
代码示例:
java
public void testMethod() throws IOException {
throw new IOException("输入输出异常");
}
5.2 throw关键字
- 作用:在方法内部主动抛出异常。
语法:
java
throw new 异常类型("异常信息");
代码示例:
java
public void testMethod() {
if (true) {
throw new IllegalArgumentException("参数不合法");
}
}
六、自定义异常
6.1 自定义异常类
- 定义:根据需要创建特定的异常类型。
语法:
java
public class 自定义异常类 extends Exception {
public 自定义异常类(String message) {
super(message);
}
}
代码示例:
java
public class NegativeDivisorException extends Exception {
public NegativeDivisorException(String message) {
super(message);
}
}
6.2 使用自定义异常
- 场景:在特定条件下抛出自定义异常。
代码示例:
java
public class DivisionOperation {
public static int divide(int numerator, int denominator) throws NegativeDivisorException {
if (denominator < 0) {
throw new NegativeDivisorException("除数不能为负数");
}
return numerator / denominator;
}
public static void main(String[] args) {
try {
int result = divide(10, -2);
System.out.println("结果是: " + result);
} catch (NegativeDivisorException e) {
System.out.println("发生异常: " + e.getMessage());
}
}
}