1、
Java异常可分为3种:
(1)错误:Java.lang.Error
(2)编译时异常:Java.lang.Exception
(3)运行期异常:Java.lang.RuntimeException
2、
三者之间的关系:
Java.lang.Error和Java.lang.Exception继承自Java.lang.Throwable;
Java.lang.RuntimeException继承自Java.lang.Exception.
3、
三者出现的时机
(1)Error (错误): 一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
(2)编译时异常(Exception): 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
(3)运行期异常(RuntimeException): 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。【对于开发而言,运行时异常使我们最应该熟悉的】
NullPointerException(空指针异常)、
IndexOutOfBoundsException(下标越界异常)
ClassCastException(类转换异常)
ArrayStoreException(数据存储异常,操作数组时类型不一致)
IO操作的BufferOverflowException异常
【反射中的常见运行时异常】
NoSuchFieldException:①没有对应字段;②属性为私有时获取Field用的方法不是getDeclaredField。
IllegalAccessException:这个异常的解释是”没有访问权限”,当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常。
解决方案:属性/构造方法.setAccessible(true);【采用setAccessible()方法,避免JVM对访问权限的检查】