java将所有的错误封装为一个对象,其根本父类为Throwable,Throwable有两个子类:Error 和Exception。
Error 是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然ThreadDeath错误是一个“正规”的条件,但它也是Error的子类,因为大多数应用程序都不应该试图捕获它。在执行该方法期间,无需在其throws子句中声明可能抛出但是未能捕获的Error的任何子类,因为这些错误可能是再也不会发生的异常条件。
Exception 类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。
简单地说
Error是无法捕获的严重错误。Exception是应该捕获的可处理的错误
Exception属于应用程序级别的异常,这类异常必须捕捉,Exception体系包括 RuntimeException体系和其他非 RuntimeException的体系。
那么RuntimeException和其他非 RuntimeException有声明区别呢?
Runtime Exception:
在定义方法时不需要声明会抛出runtime exception; 在调用这个方法时不需要捕获这个runtime exception; runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。 例如:nullpointexception,IndexOutOfBoundsException就属于runtime exception
Exception:
定义方法时必须声明所有可能会抛出的exception; 在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;exception是从java.lang.Exception类衍生出来的。例如:IOException,SQLException就属于Exception
简单的说:
非RuntimeException必要自己写catch块处理掉。如果不处理,程序将出现编译错误。RuntimeException不用try catch捕捉将会导致程序运行中断,若用则不会中断。
摘录自:
https://www.cnblogs.com/jtlgb/p/5985120.html
https://cloud.tencent.com/developer/article/2108423