【问题标题】:Why can you not throw and catch an Object in Java? [duplicate]为什么不能在 Java 中抛出和捕获对象? [复制]
【发布时间】:2011-11-22 11:46:39
【问题描述】:

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

为什么我不能在 Object. 我的意思是考虑以下代码:

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

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

【问题讨论】:

标签: java


【解决方案1】:

Java 语言规范规定只能抛出 Throwables。

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

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

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

【讨论】:

    【解决方案2】:

    您可以毫无问题地将异常引用分配给对象。但是物体不能被抛出或捕捉。

    这只适用于 Throwables。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-02-12
            • 1970-01-01
            • 2013-12-23
            • 1970-01-01
            • 2015-07-18
            • 2011-07-25
            • 1970-01-01
            • 2023-03-09
            相关资源
            最近更新 更多