throwable和exception的区别:
1、throwable是父类,exception是子类。
2、throwable是根基,exception是从throwable派生出来的。
3、throwable中包括exception(异常)和error(错误)。
4、throwable用来定义所有可以作为异常被抛出来的类,exception专指程序本身可以处理的异常,一般性的异常。
在Java程序中,所有异常对象的根基类是Throwable,Throwable从Object直接继承而来(这是Java系统所强制要求的)。Throwable有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。
Error和Exception区分:
Error是编译时错误和系统错误,系统错误在除特殊情况下,都不需要你来关心,基本不会出现。而编译时错误,如果你使用了编译器,那么编译器会提示。
Error(错误)是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。Exception(异常)是程序本身可以处理的异常。
Error是一种严重的问题,应用程序不应该捕捉它。 Exception一般可能是程序和业务上的错误,是可以恢复的。
Exception则是可以被抛出的基本类型,我们需要主要关心的也是这个类。
RunTimeException和其他Exception区分:
其他Exception,受检查异常。可以理解为错误,必须要开发者解决以后才能编译通过,解决的方法有两种,1:throw到上层,2,try-catch处理。
RunTimeException:运行时异常,又称不受检查异常,不受检查!不受检查!!不受检查!!!重要的事情说三遍,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来,比如经典的1/0,空指针等。如果不处理也会被Java自己处理。
注意:
捕获Exception时,不会捕获error,像out of memory这种问题会在中间件的日志可以看到,访问程序也会报相应的错误,方便问题定位;
捕获Throwable时,会捕获Exception和Error,像out of memory这种问题也会被捕获到,而程序对于这种Error没法进行处理,没有捕获的必要性。