1.什么是异常
异常是指程序在运行过程中发生的,由于外部问题导致的程序运行异常事件,异常的发生往往会中断程序的运行。在 Java 这种面向对象的编程语言中,万物都是对象,异常本身也是一个对象,程序发生异常就会产生一个异常对象。
2.异常分类
系统级别无法规避的异常(Error)
程序员可以捕获解决的异常(Exception)
二者都是 Java异常终极bossThrowable异常处理的重要子类,各自都包含大量子类。
3.异常执行顺序
try:
- try块中放可能发生异常的代码。
- 如果执行完try且不发生异常,则接着去执行finally块中的代码和finally后面的代码(如果有的话)。
- 如果程序发生异常,则尝试去匹配对应的catch块。
catch:
- 每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
- catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
- 在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
- 如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个方法的外部调用者中去匹配异常处理器。
- 如果try中没有发生异常,则所有的catch块将被忽略。
finally:
- finally块不是必须的,通常是可选的。
- 无论异常是否发生,异常是否匹配被处理,finally中的代码都会执行。
- 一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获和处理异常,处理异常的只能是catch块。
- finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
- finally块不管异常是否发生,只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:「System.exit()」 。
4.代码展示
1.简单的异常架构
public class Text {
public static void main(String[] args) {
int a = 6;
int b = 0;
try { //捕获异常,里面写可能会出现异常的地方
System.out.println(a / b);
} catch (Exception e) { //解决异常,执行自己写的解决异常的方法
System.out.println("被除数不能为: 0");
} finally { //不管能不能捕获到异常还是没有异常,这里都会执行
System.out.println("程序终止");
}
}
}
2.catch可以写多个,根据实际情况来定,重点(catch的参数级别从低到高),最大的放在最后一个catch里不然会报错。
5.throws/throw 关键字
「throws 关键字」
如果一个方法内部的代码会抛出检查性异常(checked exception),而方法自己又没有对这些异常完全处理掉,则java的编译器会要求你必须在方法的签名上使用 「throws」 关键字声明这些可能抛出的异常,否则编译不通过。
throws 是另一种处理异常的方式,它不同于try…catch…finally…,throws 关键字仅仅是将方法中可能出现的异常向调用者抛出,而自己则不具体处理。
采取这种异常处理的原因可能是:方法本身不知道如何处理这样的异常,或者说让调用者处理更好,调用者需要为可能发生的异常负责。
「throw 关键字」
我们也可以通过 throw 语句手动显式的抛出一个异常,throw语句的后面必须是一个异常对象。语法如下:
throw exceptionObject
6.快速使用
1.选中可能会出现异常的代码按住Ctrl+alt+T (自己选一个就OK)
2.直接在方法上抛出异常 throws
public void coco() throws Exception{
System.out.println("加油");
}
3.在代码中 throw
public void save(User user) {
if (user == null)
throw new IllegalArgumentException("User对象为空");
}