为什么你不能在Java中抛出并捕获一个Object?

时间:2011-09-22 04:01:32

标签: java

  

可能重复:
  What can you throw in Java?

为什么我不能在Object的引用中使用Exception。 我的意思是考虑以下代码:

try{.......}
catch(Object ex){.......}

它显示一个错误,我们知道任何类的所有对象都可以被Object引用。

5 个答案:

答案 0 :(得分:3)

Java语言规范说只能抛出Throwable

http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html#44043

  

每个异常都由类Throwable的实例或其子类之一表示;这样的对象可用于将信息从发生异常的点传送到捕获它的处理程序。

语言可能有不同的定义,但Java倾向于为任何类型的事物定义基本类型,以便以特定方式使用,并定义该基类中的方法以支持常见模式。 Throwable特别支持chaining和堆栈跟踪打印。如果您对异常的唯一理解是它是引用类型,那么就不可能轻易地将异常链接起来。

答案 1 :(得分:1)

您可以毫无问题地为对象分配异常引用。但是对象不能被抛出或被捕获。

这只适用于Throwables。

答案 2 :(得分:1)

因此,在catch块中,您可以确保获得有关getCause()getMessage()getStackTrace()等异常的详细信息。如果它是通用的Object,那么在没有显式转换的情况下,您将无法访问这些方法,并且您仍然不能确定这些方法实际存在。作为Throwable的实例,您确信可以从异常(catch中的对象)中检索这些详细信息。

答案 3 :(得分:0)

您不能,因为只能抛出Throwable的子类。我想他们有可能允许你在Object块中使用catch,而不是Throwable中唯一的超类 - 但是有什么意义呢?变量总是引用Throwable实例。

答案 4 :(得分:0)

也许你来自C ++,可以抛出任何东西,甚至是int。 Java异常扩展了Throwable。对象不会扩展它(当然)。