异常处理
Error和Exception
异常指程序中出现的不期而至的状况,影响了正常的程序执行流程
三种异常:
- 检查性异常
- 运行时异常
- 错误
“一尘在心”的博客深入理解Java中异常体系进行了详细介绍
Error
Error类对象由Java虚拟机生成抛出,这些异常发生时,Java虚拟机一般会选择线程终止
Exception
这些异常通常是由程序逻辑错误引起,应尽可能避免这类情况发生
RuntimeException(运行时异常)
- ArrayIndexOutOfBoundsException(数组下标越界)
- NullPointerException(空指针异常)
- ArithmeticException(算数异常)
- MissingResourceException(丢失异常)
- ClaasNotFoundException(找不到类异常)
Error和Exception区别:Error是程序无法控制和处理的,Java虚拟机会终止线程;Exception是Java虚拟机可以被处理的
捕获和抛出异常
关键字:try、catch、finally、throw、throws
package com.exception;
public class Demo1 {
public static void main(String[] args) {
int a = 1;
int b = 0;
//注意:若要捕获多个异常,需要范围从小到大
try { //监控区域
System.out.println(a/b);
} catch (Exception e) { //catch(想要捕获的异常类型)
//异常发生后执行的内容
System.out.println("Exception");
e.printStackTrace();
} catch (Throwable e) { //可进行多异常捕获
System.out.println("Throwable");
}
finally { //无论有没有异常都会执行的内容
System.out.println("finally");
}
}
}
package com.exception;
public class Demo2 {
public static void main(String[] args) {
}
//主动抛出异常,一般用在方法中
//方法上抛出异常用throws,方法里面抛出异常用throw
public void test (int a, int b) throws ArithmeticException{
if (b == 0) {
throw new ArithmeticException();
}
}
}
自定义异常
用户自定义异常类,需继承Exception
MyException.java
package com.exception.demo2;
//自定义异常
public class MyException extends Exception {
private int detail;
public MyException (int a) {
this.detail = a;
}
//重写父类中的方法,打印异常信息
@Override
public String toString() {
return "MyException{" + "detail=" + detail + '}';
}
}
Test.java
package com.exception.demo2;
public class Test {
public static void main(String[] args) {
try {
new Test().test(20);
} catch (MyException e) {
System.out.println("MyException->" + e);
}
}
public void test (int a) throws MyException {
System.out.println("传递参数为:" + a);
if (a > 10) {
throw new MyException(a); //抛出异常
}
System.out.println("正常");
}
}
总结
- 处理运行时异常时,应用逻辑规避同时辅助try-catch处理
- 在多重catch时,可在后面加catch(Exception)
- 对于不确定的代码块,可加上try-catch处理潜在异常
- 尽可能处理异常,而不是使用printStackTrace()方法打印输出
- 使用finally语句释放资源,如IO流

浙公网安备 33010602011771号