Java 为什么catch块中不允许对象引用?

Java 为什么catch块中不允许对象引用?,java,Java,为什么下面的代码不起作用?而每个类都是从对象类扩展而来的 try { // simple code , throw some exception } catch (Object e) { // handle the exception } 若从对象类继承了异常类,那个么为什么catch块中不允许对象引用 如果有人知道以上问题的答案,请告诉我。catch子句的参数必须继承自Throwable 这个约束从一开始就被应用到Java语言中,并且是向JRE编写者承诺的一部分,他们可以利用它来帮助他们加

为什么下面的代码不起作用?而每个类都是从对象类扩展而来的

try {
// simple code , throw some exception
} catch (Object e) { 
// handle the exception
}
若从对象类继承了异常类,那个么为什么catch块中不允许对象引用


如果有人知道以上问题的答案,请告诉我。

catch子句的参数必须继承自
Throwable


这个约束从一开始就被应用到Java语言中,并且是向JRE编写者承诺的一部分,他们可以利用它来帮助他们加快进度。

catch子句的参数必须继承自
Throwable

这个约束从一开始就被应用到Java语言中,并且是对JRE编写者承诺的一部分,他们可以利用它来帮助他们加快进度。

来自javadocs:

Throwable类是中所有错误和异常的超类 Java语言。仅限于作为此类实例的对象(或 它的一个子类)由Java虚拟机或can抛出 由JavaThrow语句抛出类似地,仅此类或 它的一个子类可以是catch子句中的参数类型。对于 编译时检查异常、Throwable和任何 Throwable的子类,它不是 运行时异常或错误被视为已检查异常

请在此处阅读更多信息:

来自javadocs:

Throwable类是中所有错误和异常的超类 Java语言。仅限于作为此类实例的对象(或 它的一个子类)由Java虚拟机或can抛出 由JavaThrow语句抛出类似地,仅此类或 它的一个子类可以是catch子句中的参数类型。对于 编译时检查异常、Throwable和任何 Throwable的子类,它不是 运行时异常或错误被视为已检查异常


在这里阅读更多信息:

您似乎是编程新手。无论如何,Object是java类层次结构的根,并且从该层次结构定义了可丢弃的Throwable层次结构,如果存在相关问题,其子体用于抛出或被抛出

基本上,您需要了解的是,在catch块中只能使用错误和异常,因为我们跟踪发生的问题,而不是导致问题的对象

所以如果你得到ArrayOutOfBoundsException(它是从Exception派生的&Exception是从Throwable派生的),这意味着一个数组对象就是这个异常的原因,更好的异常处理包括捕获特定的问题


我想我帮助过你,如果真的有帮助的话,那么我的答案是可以接受的。

你似乎是编程新手。无论如何,Object是java类层次结构的根,并且从该层次结构定义了可丢弃的Throwable层次结构,如果存在相关问题,其子体用于抛出或被抛出

基本上,您需要了解的是,在catch块中只能使用错误和异常,因为我们跟踪发生的问题,而不是导致问题的对象

所以如果你得到ArrayOutOfBoundsException(它是从Exception派生的&Exception是从Throwable派生的),这意味着一个数组对象就是这个异常的原因,更好的异常处理包括捕获特定的问题


我假设我帮了你,如果它真的帮了你,那么我的答案是可以接受的。

如果catch子句中的
Object
where accept,类似这样的东西实际上会起作用:

try {
    if (needToThrow) { 
        List<String> messages = new ArrayList<String>();
        list.add("a nice message");
        list.add("another message");
        list.add("random message"); 
        throw messages;
    } else {
        //do other stuff here
    } 
} catch (List list) {
    System.out.println("Got a list of messages, lets handle them");
}
试试看{
如果(需要省略){
列表消息=新建ArrayList();
添加(“一条好消息”);
列表。添加(“另一条消息”);
列表。添加(“随机消息”);
抛出消息;
}否则{
//在这里做其他事情
} 
}捕获(列表){
System.out.println(“获得消息列表,让我们来处理它们”);
}
然而,这将是一种非常奇怪的控制执行流的方法,一个简单的
if
语句可以解决这个问题

因此,try-and-catch机制不是用于执行基本的流控制,而是处理意外结果。当代码的一部分遇到意外结果时,它抛出一条消息,指示他无法继续,他将中止下一条语句并将执行返回到上面的范围。他基本上是说我收到了一个错误,无法继续,有人处理这种情况。对于处理这种情况的人来说,需要收集资源:JVM将对整个堆栈进行快照,并将其放入一个可丢弃的对象中。这就是为什么您只能捕获可丢弃的东西。此外,上面的示例将执行得很差,因为错误资源将在不必要的地方收集

关于两种已知的可丢弃的
类型
程序可以从中恢复的情况被归类为
异常
,例如尝试打开丢失的文件、连接到无法访问的位置、尝试访问错误的URL等等

当程序无法恢复时,这些情况被归类为
错误
,例如内存不足或遇到编译错误

尽管您仍然可以编写自己的类继承自
Throwable
,但上述两种类型已经涵盖了所有可能的错误类型(可恢复或不可恢复),因此您可能不会看到任何不是来自这些类型的错误


此外,捕获可丢弃的
也是一种糟糕的做法(你能处理一些无法处理的事情,比如
错误
?)。当您想要“捕获我代码中的任何内容”时,捕获
异常

如果
对象
其中