2011-04-11 240 views

回答

4

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

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

例如用于的ThreadDeath的JavaDoc的说:

应用程序应抓住这一类的实例只有当它必须被异步终止后清理。如果ThreadDeath被一个方法捕获,重新抛出它是非常重要的,以便线程真正死亡。

1

Throwable Java Doc

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

两个子类的错误和异常的实例通常用于指示发生异常情况。通常情况下,这些实例是在异常情况下新创建的,以包含相关信息(如堆栈跟踪数据)。

Exception Java Doc

的Exception类及其子类是Throwable的一种形式,它指出的条件合理的应用程序想要捕获的。

请阅读文档,它解释。

1

这是层次结构

java.lang.Object 
    java.lang.Throwable 
     java.lang.Exception 
0

Throwable可能是错误或异常。

从Java文档:

Error是Throwable的子类,表示严重的问题,一个合理的应用程序不应该试图捕获。大多数此类错误都是异常情况。

Exception及其子类是Throwable的一种形式,表示合理应用可能需要捕获的条件

3

Throwable类是由Exception类和Error类扩展的,所以通过使用throws Throwable你实际上是说你的方法不仅可以抛出异常,还可以抛出一个错误。根据文档两者之间的区别是,例外的是

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

而错误表示

严重的问题,一个合理的应用程序应该不要试图捕捉

请参阅here了解更多d etails。

0

如果Throwable只能是一个ErrorException,将有一个方法throws Throwablethrows Exception之间没有区别,因为Error可以随时抛出,即使未声明(如RuntimeException,太)。

但随着throws Throwable声明的方法还可以使用throw new Throwable("example");,或者是这样的:

class CannonBall extends Throwable {} 
throw new CannonBall(); 

通常没有理由做这样的事情,所以在实践中throws Throwablethrows Exception等同。