Throwable类的理解

Throwable 类是 Java 语言中所有错误或异常的超类。有两个子类:Error(错误)、 Exception(异常)。

1、Error:通常由JVM抛出,程序本身无法修复错误。出现问题后,应该在程序以外查找,解决问题。
常见的子类有:VirtualMachineError(InternalError, OutOfMemoryError, StackOverflowError, UnknownError)

2、Exception:
(1)异常来源:
一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。

(2)异常处理机制
第一、在方法中用try...catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。
第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。即由上层的调用方法来处理。

(3)异常分类:
a、不受检查异常(uncheckedexception)
主要是运行时异常(RuntimeException类及其子类),特点是JVM不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try...catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。例如,当除数为零时,就会抛出 java.lang.ArithmeticException异常。
常见异常:
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, ClassCastException, EmptyStackException, IllegalArgumentException, IndexOutOfBoundsException(ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException), JMRuntimeException, NegativeArraySizeException, NoSuchElementException, NullPointerException, SystemException,

b、受检查异常(checkedexcetpion)
除了RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常,这种异常的特点是要么用try...catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。
常见异常:
ClassNotFoundException, DataFormatException, IOException, NoSuchFieldException, NoSuchMethodException, ParseException, SQLException, TimeoutException, XMLParseException,

(4)、最佳解决方案
a、对于运行时异常,我们不要用try...catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异常,一旦发现该异常,正确的做法就会改进程序设计的代码和实现方式,修改程序中的错误,从而避免这种异常。捕获并处理运行时异常是好的解决办法,因为可以通过改进代码实现来避免该种异常的发生。
b、对于受检查异常,没说的,老老实实去按照异常处理的方法去处理,要么用try...catch捕获并解决,要么用throws抛出!
c、对于Error(运行时错误),不需要在程序中做任何处理,出现问题后,应该在程序在外的地方找问题,然后解决。

你可能感兴趣的:(jvm)