常用异常处理:
- 异常处理的五个关键字:try、catch、finally、throw、throws
- try即尝试,是监控区域,尝试能不能正常的走完整个作用域,如果不能则抛出一个异常。所以在try块里经常放上可能会抛出异常的程序段。
- catch就是处理try里抛出来的异常,其中catch的参数列表接收的是一个异常的引用,是throw抛出来的异常的引用。其中try和catch可以嵌套引用。 用法:catch(想要捕获的异常类型){...}
- finally用来处理善后工作(即在IO流或者跟资源相关的东西需要关闭,关闭的操作放在finally里面),一般接在try...catch后面。无论有没有出现异常finally都会执行。但是在出现没有进入try之前就报错的情况下,finally不会执行。
- throw就是主动抛出一个异常,并获取这个异常的引用,这个异常会被抛到外部的环境,由外部环境进行处理。一般在方法中。
- throws就是向上抛出异常,可以无限向上抛出,直到抛给main方法,main方法就抛给JVM虚拟机去解决。在方法中处理不了这个异常,在方法上抛出异常。
- 捕获异常的意义在于,如果异常不捕获,运行就会停止;异常被捕获后,将不会停止程序,继续运行。
例子:
(1)try...catch + finally
public class Test {
public static void main(String[] args) {
int a = 1;
int b = 0;
try {//try监控区域
System.out.println(a / b);
}catch (ArithmeticException e) {//catch捕获异常
System.out.println("程序出现异常,变量b不能为0");
}finally {//处理善后工作
System.out.println("final");
}
(2) catch的用法:
public static void main(String[] args) {
int a = 1;
int b = 0;
//假设要捕获多个异常:从小到大
try {//监控区域
if (b==0){// throw throws
throw new ArithmeticException();//主动抛出异常
}
System.out.println(a / b);
}catch (Error e){//catch(想要捕获的异常类型) 捕获异常
System.out.println("Error");
}catch (Exception e){//catch(想要捕获的异常类型) 捕获异常
System.out.println("Exception");
}catch (Throwable e){//catch(想要捕获的异常类型) 捕获异常
System.out.println("Throwable");
}finally {
System.out.println("finally");
}
}
}
输出结果:
(3)若捕获多个异常,应从大到小(例:先 catch(Error)再 catch(Throwable))
(4)快捷键:选中代码按 Ctrl + Alt + T
(5) throw与throws的用法
注意:
throws
public void test(int a, int b) throws ArithmeticException {}
throw
if (b == 0) {//throw throws
throw new ArithmeticException();//主动抛出异常,一般在方法中使用
}
(6)结束代码的运行
System.exit(0);