为什么我不能在Object的引用中使用Exception。 我的意思是考虑以下代码:
try{.......}
catch(Object ex){.......}
它显示一个错误,我们知道任何类的所有对象都可以被Object引用。
答案 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。对象不会扩展它(当然)。