一.异常处理的流程
main函数处理中出现异常:
1.由自己(main函数)处理异常
2.由main的上级来处理
main由JVM来调用(水调用的方法 谁就来处理异常)
这里的最终的异常是由JVM来处理的
JVM默认的处理异常方式
1.打印错误所在的位置
2.打印错误信息/by zero
3.停止你的程序
二.异常处理的类
异常处理的类
Throwable 所有异常的父类
Error(系统崩溃 数据库崩溃)
Exception(异常)
RuntimeException(运行时异常)
异常发生如何解决
三.如何处理异常
try...catch...finally
try指的是要被测试的代码部分(有可能发生异常的代码)
catch指的是要捕获的异常
finally指的是异常处理后要执行的代码
多catch的处理异常
由上至下进行匹配 匹配上一个剩下的catch都不走了
catch捕获时 使用的类要由小到大
example:
public static void main(String[] args) {
TestException testException = new TestException();
try {
//放可能发生异常的代码
System.out.println("hahahaha");
int fun = testException.fun(10, 0);
System.out.println(fun);
System.out.println("hahahaha");
}
catch (ArithmeticException e) {
//ArithmeticException e = new ArithmeticException();
// 捕获异常对象(匹配这个异常对象)
//捕获成功 会执行catch中的代码
//程序不会被终止
System.out.println("你除了0");
}catch (IndexOutOfBoundsException e) {
System.out.println("越界异常");
}catch (Exception e) {
System.out.println("看我抓住了什么");
}
System.out.println("11111111111111");
}
class TestException{
//测试异常的发生
public int fun(int a, int b) {
//发生异常时
//会创建一个 异常对象
//new ArithmeticException("异常信息")
//这时会把创建出来的异常对象返回
//返回给他的上级去处理(谁调用这个方法 就给谁处理)
//这个异常对象就返回给main函数了
//main函数接到异常没处理 交给上级
//JVM处理(打印错误信息)
return a/b;
}
}
finally
finally中的代码 一定会被执行
finally一般关闭资源 关闭数据库 关闭流
final finally finalize 之间的区别 : 三者之间无关系
final 修饰类 修饰方法 修饰变量
finally 异常处理中关键字 可以关闭资源 一定会被执行
finalize 是object类中的方法 是用来垃圾回收的 可以将内存中没有任何引用的垃圾空间 回收 系统调用
try {
int num = 10/0;
} catch (ArithmeticException e) {
System.out.println("你除了0");
}finally {
System.out.println("我是finally中的语句");
}