《异常处理》
目录
一、相关概念
什么是异常?
- 异常是程序在执行时发生的错误事件,它会打断指令的正常流程;
- Java中提供了一种独特的异常处理机制,通过异常来处理程序设计中出现的错误;
- Java异常是一个描述在代码段中发生异常情况(出错)的对象。
Java异常分类
-
Error
Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError (内存溢出)之类,都是 Error 的子类。
-
Exception
Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。
二、异常处理方法
案例一(检查性异常)
- 创建Test类,书写testException()方法,调用finalize()方法(代码报红线)。
- Alt+Enter自动提示进行异常处理。
- 方式一:方法throws异常
public void testException() throws Throwable {
finalize();
}
- 方式二:try/catch捕获异常
public void testException() {
try {
finalize();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
案例二(非检查性异常)
- Test类
package com.hpr.test;
public class Test {
...
public static void main(String[] args) {
System.out.println(3/0);
System.out.println("程序执行完毕!");
}
}
执行结果
try…catch…finally…
package com.hpr.test;
public class Test {
...
public static void main(String[] args) {
try { //try块中放置可能会发生异常的代码
System.out.println(3 / 0);
} catch (ArithmeticException e) { //catch块指定要捕获的异常类型,并将异常封装为对象e
e.printStackTrace(); //异常处理:打印异常信息
} finally {
System.out.println("资源释放..."); //异常发不发生都会执行,一般做资源释放,防止线程阻塞
}
System.out.println("程序执行完毕!");
}
}
执行结果
三、自定义异常
- CustomException类
package com.hpr.exception;
public class CustomException extends Exception{
public CustomException() {
}
public CustomException(String message) {
super(message);
}
public CustomException(String message, Throwable cause) {
super(message, cause);
}
}
- 测试类
package com.hpr.test;
import com.hpr.exception.CustomException;
public class Test {
public static void judgeAge(int age) throws CustomException {
if (age >= 18 && age <= 60) {
System.out.println("符合法定用工年龄...");
} else {
throw new CustomException("与法定用工年龄不符!");
}
}
public static void main(String[] args) {
int age = 10;
try {
judgeAge(age);
} catch (CustomException e) {
e.printStackTrace();
}
}
}
执行结果
总结
重点
- 异常分类;
- 异常处理方法;
- 自定义异常。
难点
- 异常处理方法。