一.异常简介
1.定义
程序运行过程出现的错误或意外
异常看作是一个类,根类是Throwable(属于Object超级类的子类)
2.作用
运行时发生的错误如果没有异常处理机制,程序将会终止并使所有已分配资源的状态保持不变,这样会导致资源泄露。
异常处理机制由编译器强制执行
3.异常分类
-
Error
-
Exception
-
RuntimeException程序有错
ArithmeticException数字
NullPointerException空指针
NumberFolrmatExceptionInputMismatchException非数字类型
-
非RuntimeException编译期出错
IOE,sql…
-
二.异常处理
1.产生过程
-
thow抛出异常
程序执行过程出现异常>>生成异常类
-
catch捕获异常
接受异常类对象>>寻找处理异常代码处理对象
-
未捕获退出程序
2.异常处理方式
-
捕获异常(快捷输入: ctrl+alt+t,选中内容)
try{ 监控代码 }catch(异常类型){ 处理语句 } * catch后面小括号中的类型可以是具体的异常类型,也可以是该异常类型的父类型。 * catch可以写多个,从上到下,必须遵守从小到大。 * 建议catch的时候,精确的一个一个处理,有利于程序的调试
try {//监控代码,JVM抛出异常 int age = scanner.nextInt(); if (age<18){ throw new Exception(); } } catch (Exception e) {//接受异常 throw new RuntimeException(e); } public static void main (String[] args) throws Exception { Scanner scanner = new Scanner(System.in); System.out.println("请输入年龄:"); try {//监控代码,JVM抛出异常 int age = scanner.nextInt(); if (age<18){ throw new Exception(); } } catch ( InputMismatchException e) {//接受异常 throw new RuntimeException(e); } catch (Exception e) { throw new RuntimeException(e); } }
-
向上抛异常
在方法名后面加上throws Exception…, 方法本身只是抛出异常,由函数调用者来捕获异常
1.try…catch…
try{
监控代码
}catch(异常类型){
处理语句
}
2.finally块
最后结尾处理
作用:
- 异常处理模块必须执行的模块
- 无条件执行操作
- 每个try语句至少一个catch语句或finally语句
3.异常处理顺序
try>>catch>>finally
4.thows关键字
- 向上抛
throws总是出现在一个方法头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员方法中抛出的异常的类型
public class EmployeeDaoImpl {
public void queryById() throws ClassNotFoundException {//方法的头部
Class.forName("");
}
}
5.throw语句
throw
关键字通常用在方法体中,并且抛出一个异常对象。
- 程序在执行到
throw
语句时立即停止,它后面的语句都不执行。 - 通过
throw
抛出异常后,如果想在上一级代码中来捕获并处理异常,则需要在抛出异常的方法中使用throws
关键字在方法声明中指明要抛出的异常; - 如果要捕捉
throw
抛出的异常,则必须使用try—catch
语句
6.自定义异常
创建一个类来接受异常,并继承异常类(Exception…),命名时注意加上Exception驼峰命名法
JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常
7、throw 和 throws总结
- throws说明你有哪个可能,倾向
- throw的话,那就是你把那个倾向变成真实的了同时:
- throws出现在方法函数头;而throw出现在函数体;
- throws表示出现异常的一种可能性,并不一定会发生这些异常;
- throw则是抛出了异常,执行throw则一定抛出了某种异常;
- 两者都是消极处理异常的方式(这里的消极并不是说这种)