这两个有什么区别?
答案 0 :(得分:4)
例外是程序逻辑中的错误。 JVM使用错误来指示环境出现问题,例如OutOfMemoryError或IncompatibleClassChangeError。 ThreadDeath用于杀死线程。 Throwable是所有这些的超级课程。
在正常的程序逻辑中,你不应该抛出或捕获Throwables或Errors。我能想到捕获错误的主要原因是:你正在使用自己的类加载系统,并希望隔离破碎的插件。
例如,针对ThreadDeath的JavaDoc说:
只有在异步终止后必须清理该应用程序的实例时,才应该捕获该类的实例。如果ThreadDeath被一个方法捕获,重要的是它被重新抛出,以便线程实际死掉。
答案 1 :(得分:3)
Throwable类由Exception类和Error类扩展,因此通过使用throws Throwable,您实际上是在说您的方法不仅会抛出异常而且还会抛出错误。根据文档,两者之间的区别在于例外是
合理的应用程序可能想要捕获的条件
虽然错误表明
合理的应用不应该试图抓住的严重问题
有关详细信息,请参阅here。
答案 2 :(得分:1)
Throwable类是Java语言中所有错误和异常的超类。只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出。类似地,只有这个类或其子类之一可以是catch子句中的参数类型。
两个子类的实例,Error和Exception,通常用于表示发生了异常情况。通常,这些实例是在特殊情况的上下文中新创建的,以便包括相关信息(例如堆栈跟踪数据)。
类Exception及其子类是Throwable的一种形式,表示合理的应用程序可能想要捕获的条件。
请阅读文档,它解释道。
答案 3 :(得分:1)
这是层次结构
java.lang.Object
java.lang.Throwable
java.lang.Exception
答案 4 :(得分:0)
Throwable可能是错误或异常。
来自Java doc:
Error
是Throwable的子类,表示合理的应用程序不应该尝试捕获的严重问题。大多数此类错误都是异常情况。
类Exception
及其子类是Throwable的一种形式,表示合理的应用程序可能想要捕获的条件。
答案 5 :(得分:0)
如果Throwable
只能是Error
或Exception
,则throws Throwable
和throws Exception
之间的方法没有区别,因为{ {1}}可以随时抛出,即使它未被声明(例如Error
)。
但使用RuntimeException
声明的方法也可以使用throws Throwable
,或类似的内容:
throw new Throwable("example");
通常没有理由这样做,所以在实践中class CannonBall extends Throwable {}
throw new CannonBall();
和throws Throwable
等同于。