Java异常结构
在Java语言中,程序执行中发生的不正常情况被称为异常;所有的异常都会继承Throwable接口,而Throwable下一层又分为两类,分别是Error和Exception。
Error
Error描述的是Java程序运行时系统内部的错误,通常会比较严重,程序只会被安全地终止,应用程序一般不会去捕获这种异常,通常为虚拟机异常,例如StackOverflowError和OOM。
Exception
Exception根据异常发生的时间可以分为两类,分别是派生于RuntimeException(运行时异常)和非派生于RuntimeException(编译时异常)两类,前者通常为程序错误导致的异常,后者通常是程序本身没有问题,由于像I/O错误等问题导致的异常。
Exception根据是否能在编译时进行检查分为受查异常和非受查异常,受查异常会在编译时被检测,如果一个方法中的代码会抛出受查异常,那么该方法就必须被throws或try-catch处理;而非受查异常不会在编译时被检测,Java中Error和Exception类的子类属于非受查异常,除此之外继承自Exception的类型为受查异常。
常见异常
- IOException
读写时异常 - ClassNotFoundException
动态加载类信息时,通过类路径没有扎到类的时候,可能是类名称或路径有问题 - CloneNotSupportedException
不支持克隆异常,当执行克隆方法的类没有实现或不支持cloneable接口的时候抛出 - ArithmeticException
除法中除数为0的时候 - IllegalAccessException
无访问权限 - ClassCastException
两个类类型转换不兼容抛出的异常 - IllegalArgumentException
输入不合法参数的时候 - IllegalStateException
在非法或不适当的时间调用方法产生的异常,例如在对客户端响应结束之后尝试向客户端输出内容 - IndexOutOfBoundsException
下标越界异常 - NoSuchElementException
由 Enumeration 的 nextElement 方法抛出,表明枚举中没有更多的元素 - NullPointerException
空指针异常 - UnKnownAnnotationValueException
指示遇到一个未知种类的注释值 - UnknownTypeException
指示遇到未知种类的类型 - SQLException
sql语句执行异常