为什么catch块不能是Object类型?

use*_*445 1 java exception-handling try-catch throwable

我是JAVA的新手我准备我的OCP JP认证.

我对异常处理有这个疑问

try{
        assert(false):"HI";
    }
catch(Throwable e){}
Run Code Online (Sandbox Code Playgroud)

我知道断言不应该被处理,但我只是用它来举例.从我所知的Object-> Throwable - >异常和错误

如果我在catch块中有Throwable或Exception或Error它可以工作但是当我有一个超类的对象时,eclipse会显示编译时错误.

任何我无法在catch块中拥有Object的原因?

rge*_*man 5

只能在Java中Throwable抛出或捕获类型的对象(包括ExceptionError).

throw new Object(); // compiler error
throw new Integer(1); // compiler error
Run Code Online (Sandbox Code Playgroud)

因此,抓住任何旧的都是毫无价值的Object,因为只有Throwables才能被抛出.

引自JLS,第14.20节:

在异常参数类型的表示中使用的每个类类型必须是Throwable类或Throwable的子类,否则会发生编译时错误.