Java异常 异常处理机制主要回答了三个问题
What:异常类型回答了什么被抛出
Where:异常堆栈跟踪回答了在哪抛出
Why:异常信息回答了为什么被抛出
Java的异常体系
Error和Exception的区别从概念角度解析Java的异常处理机制:
1.Error:程序无法处理的系统处理,编辑器不做检查(如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等)
2.Exception:程序可以处理的异常,捕获后可能恢复
RuntimeException:不可预知的,程序应当自行避免
非RuntimeException:可预知的,从编译器校验的异常
从责任角度看:
1.Error属于JVM需要负担的责任
2.RuntimeException是程序应该负担的责任
3.Checked Exception可检查异常是Java编译器应该负担的责任(编译时就应该捕获或者抛出的异常)
常见Error以及Exception RuntimeException1.NullPointerException - 空指针引用异常
2.ClassCastException - 类型强制转换异常
3.IllegalArgumentException - 传递非法参数异常
4.IndexOutOfBoundsException - 下标越界异常
5.NumberFormatException - 数字格式异常
非RuntimeException1.ClassNotFoundException - 找不到指定class的异常
2.IOException - IO操作异常
3.SQLException - SQL异常
Error1.NoClassDefFoundError - 找不到class定义的异常(原因:类依赖的class或者jar不存在;类文件存在,但是存在不同的域中;大小写问题,javac编译的时候是无视大小写的,很有可能编译出来的class文件就与想要的不一样)
2.StackOverflowError - 深递归导致栈被耗尽而抛出的异常
3.OutOfMemoryError - 内存溢出异常
Java的异常处理机制抛出异常:创建异常对象,交由运行时系统处理
捕获异常:寻找合适的异常处理器处理异常,否则终止运行
private static int doSomething(){ try { int i = 10/0; System.out.println("i= " + i); } catch (ArithmeticException e) { System.out.println("ArithmeticException: " + e); return 0; } catch (Exception e) { System.out.println("Exception: " + e); return 1; } finally { System.out.println("Finally"); return 2; } } public static void main(String[] args) { System.out.println("执行后的值为:" + doSomething()); System.out.println("执行结束"); }