Java异常

- 检查性异常
用户错误或问题引起的异常,比如打开一个不存在文件时,程序员无法预见。 - 运行时异常
是可能被程序员避免的异常。与检查性异常相反,编译不会报错,运行时才会报错。 - 错误
不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略,比如栈溢出,一个错误就发生了,它们在编译时也是检查不到的。
异常体系结构
- Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超累
- Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception
![]()
错误

异常

- 运行时异常在代码编写的时候是不容易发现的,但是运行时会报错,所以也称为非检查性异常
- 非运行时异常和错误在代码编写的时候是可以被发现的,所以也称为检查性异常
异常处理机制
- 抛出异常
- 捕获异常
- 异常处理的5个关键字
try、catch、finally、throw、throws
方法头部抛出异常用throws、方法体内抛出异常用throw
``java
package com.crazygod.exception;
public class Demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
// 假设捕获多个异常,从小到大
try { // 监控区域
System.out.println(a / b);
} catch (ArithmeticException e) { // 捕获异常
System.out.println("程序出现异常,变量b不能为0");
} catch (Error e) {
System.out.println("Error");
} catch (Exception e) {
System.out.println("Exception");
} catch (Throwable t) {
System.out.println("Throwable");
} finally { // 处理善后工作
System.out.println("finally");
}
}
}
```java
package com.crazygod.exception;
public class Demo02 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
new Demo02().test(a, b);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
// 假设在方法中只抛出但是没有处理异常,则要在方法头部抛出异常,谁调用谁处理
public void test(int a, int b) throws ArithmeticException{
if (b == 0) {
throw new ArithmeticException(); // 主动抛出异常,一般在方法中使用
}
}
}
自定义异常


package com.crazygod.exception;
// 自定义异常类
public class MyException extends Exception{
private int detail;
public MyException(int detail) {
this.detail = detail; // 异常时打印的信息
}
// toString:异常的打印信息
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
package com.crazygod.exception;
public class Test {
// 可能会出现异常的方法
static void test(int a) throws MyException {
if (a > 10) {
throw new MyException(a);
}
}
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println(e);
}
}
}


浙公网安备 33010602011771号