throws Throwable和throws Exception之间有什么区别

时间:2011-04-11 07:24:26

标签: java

这两个有什么区别?

6 个答案:

答案 0 :(得分:4)

例外是程序逻辑中的错误。 JVM使用错误来指示环境出现问题,例如OutOfMemoryError或IncompatibleClassChangeError。 ThreadDeath用于杀死线程。 Throwable是所有这些的超级课程。

在正常的程序逻辑中,你不应该抛出或捕获Throwables或Errors。我能想到捕获错误的主要原因是:你正在使用自己的类加载系统,并希望隔离破碎的插件。

例如,针对ThreadDeath的JavaDoc说:

  

只有在异步终止后必须清理该应用程序的实例时,才应该捕获该类的实例。如果ThreadDeath被一个方法捕获,重要的是它被重新抛出,以便线程实际死掉。

答案 1 :(得分:3)

Throwable类由Exception类和Error类扩展,因此通过使用throws Throwable,您实际上是在说您的方法不仅会抛出异常而且还会抛出错误。根据文档,两者之间的区别在于例外是

  

合理的应用程序可能想要捕获的条件

虽然错误表明

  

合理的应用不应该试图抓住的严重问题

有关详细信息,请参阅here

答案 2 :(得分:1)

Throwable Java Doc

  

Throwable类是Java语言中所有错误和异常的超类。只有作为此类(或其子类之一)的实例的对象才被Java虚拟机抛出,或者可以被Java throw语句抛出。类似地,只有这个类或其子类之一可以是catch子句中的参数类型。

     

两个子类的实例,Error和Exception,通常用于表示发生了异常情况。通常,这些实例是在特殊情况的上下文中新创建的,以便包括相关信息(例如堆栈跟踪数据)。

Exception Java Doc

  

类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只能是ErrorException,则throws Throwablethrows Exception之间的方法没有区别,因为{ {1}}可以随时抛出,即使它未被声明(例如Error)。

但使用RuntimeException声明的方法也可以使用throws Throwable,或类似的内容:

throw new Throwable("example");

通常没有理由这样做,所以在实践中class CannonBall extends Throwable {} throw new CannonBall(); throws Throwable 等同于