开发者

What is the difference between throws Throwable and throws Exception

Any difference about those tw开发者_高级运维o?


Exceptions are for errors in the program logic. Error are used by the JVM to signal that something is wrong with the environment such as an OutOfMemoryError or IncompatibleClassChangeError. ThreadDeath is used to kill Threads. Throwable is a super class over all of these.

In normal program logic, you should never throw nor catch Throwables or Errors. The main reason I can think of for catching a Errors is this: You are using your own class loading system and want to isolate broken plugins.

The JavaDoc for ThreadDeath for example says:

An application should catch instances of this class only if it must clean up after being terminated asynchronously. If ThreadDeath is caught by a method, it is important that it be rethrown so that the thread actually dies.


The Throwable class is extended both by the Exception class and the Error class, so by using throws Throwable you are actually saying that your method may not only throw an Exception but also an Error. The difference between the two according to the documentation is that Exceptions are

conditions that a reasonable application might want to catch

while errors indicate

serious problems that a reasonable application should not try to catch

See here for more details.


This is the hierarchy

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


Throwable Java Doc

The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause.

Instances of two subclasses, Error and Exception, are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data).

Exception Java Doc

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

Please read the doc, it explains.


A Throwable could be a Error or Exception.

From Java doc:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.


If a Throwable could only be an Error or an Exception, there would be no difference between throws Throwable and throws Exception for a method, as Error can be always thrown, even if it was not declared (like RuntimeException, too).

But a method declared with throws Throwable can also use throw new Throwable("example");, or something like this:

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

There normally is no reason to do something like this, so in practice throws Throwable and throws Exception are equivalent.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜