【发布时间】:2011-11-22 11:46:39
【问题描述】:
为什么我不能在 Object. 我的意思是考虑以下代码:
try{.......}
catch(Object ex){.......}
它显示一个错误,我们知道任何类的所有对象都可能被 Object 引用。
【问题讨论】:
-
认为你有一个会走路的人。你可以告诉他走路。但是即使你问,Object也做不到。
标签: java
为什么我不能在 Object. 我的意思是考虑以下代码:
try{.......}
catch(Object ex){.......}
它显示一个错误,我们知道任何类的所有对象都可能被 Object 引用。
【问题讨论】:
标签: java
Java 语言规范规定只能抛出 Throwables。
http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html#44043
每个异常都由类
Throwable或其子类之一的实例表示;这样的对象可用于将信息从发生异常的点传送到捕获它的处理程序。
该语言的定义可能不同,但 Java 倾向于为任何旨在以特定方式使用的事物定义基类型,并在该基类中定义方法以支持常见模式。 Throwable 特别支持chaining 和堆栈跟踪打印。如果您对异常的唯一了解就是它是一个引用类型,那么就不可能如此轻松地链接异常。
【讨论】:
您可以毫无问题地将异常引用分配给对象。但是物体不能被抛出或捕捉。
这只适用于 Throwables。
【讨论】:
因此,在 catch 块中,您可以确保获得有关异常的一些详细信息,例如 getCause()、getMessage()、getStackTrace()。如果它是通用的Object,那么如果没有显式强制转换,您将无法访问这些方法,并且您仍无法确定这些方法确实存在。作为 Throwable 的实例,您确信您可以从异常(catch 中的对象)中检索这些详细信息。
【讨论】:
你不能因为只能抛出 Throwable 的子类。我想他们可能允许您在 catch 块中使用 Object,而不是 - Throwable 的唯一超类 - 但重点是什么,因为变量总是引用Throwable 实例。
【讨论】:
也许您来自可以抛出任何东西的 C++,甚至是 int。 Java 异常扩展 Throwable。对象不会扩展它(当然)。
【讨论】: