-2

下面的代码是方法头和正文,但我收到以下错误: no exception of type object can be thrown an exception type must be a subclass of Throwable. 我正在尝试执行这段代码: catch(Object object).

public void method15665(Class435 class435, int i) {
    do {
        try {
            try {
                byte[] is
                        = new byte[(int) class435.method7563(1085678935)];
                int i_3_;
                for (int i_4_ = 0; i_4_ < is.length; i_4_ += i_3_) {
                    i_3_ = class435.method7564(is, i_4_, is.length - i_4_,
                            (byte) -10);
                    if (i_3_ == -1)
                        throw new EOFException();
                }
                Class224_Sub8 class224_sub8 = new Class224_Sub8(is);
                if ((class224_sub8.aByteArray8535.length
                        - class224_sub8.anInt8536 * 475822179)
                        < 1) {
                    try {
                        class435.method7572(-1683167102);
                    } catch (Exception exception) {
            /* empty */
                    }
                    break;
                }
                int i_5_ = class224_sub8.method13859((short) -7287);
                if (i_5_ < 0 || i_5_ > 1) {
                    try {
                        class435.method7572(-1683167102);
                    } catch (Exception exception) {
            /* empty */
                    }
                    break;
                }
                if ((class224_sub8.aByteArray8535.length
                        - class224_sub8.anInt8536 * 475822179)
                        < 2) {
                    try {
                        class435.method7572(-1683167102);
                    } catch (Exception exception) {
            /* empty */
                    }
                    break;
                }
                int i_6_ = class224_sub8.method13737(2071056893);
                if ((class224_sub8.aByteArray8535.length
                        - 475822179 * class224_sub8.anInt8536)
                        < 6 * i_6_) {
                    try {
                        class435.method7572(-1683167102);
                    } catch (Exception exception) {
            /* empty */
                    }
                    break;
                }
                for (int i_7_ = 0; i_7_ < i_6_; i_7_++) {
                    Class323 class323
                            = Class399.aClass195_Sub2_Sub1_5932
                            .method14614(class224_sub8, -2141543778);
                    if ((Class255.aClass255_3016
                            == (((Class173_Sub1) this).aClass255Array9960
                            [class323.anInt5015 * 1568411443]))
                            && (Class399.aClass195_Sub2_Sub1_5932.method14624
                            (class323.anInt5015 * 1568411443, 82620551)
                            .aClass350_2171.method6687
                                    (-1035085164).aClass5162.isAssignableFrom
                                    (class323.anObject5014.getClass())))
                        anInterface50_2149.method298((class323.anInt5015
                                * 1568411443),
                                class323.anObject5014,
                                -1250481088);
                }
            } catch (Exception exception) {
                try {
                    class435.method7572(-1683167102);
                } catch (Exception exception_8_) {
                    exception = exception_8_;
                }
                break;
            }
            try {
                class435.method7572(-1683167102);
            } catch (Exception exception) {
        /* empty */
            }
        } catch (Object object) {
            try {
                class435.method7572(-1683167102);
            } catch (Exception exception) {
        /* empty */
            }
            throw object;
        }
    } while (false);
}

有谁知道如何解决这个问题?将不胜感激!

4

3 回答 3

2

代替

} catch (Object object) {

} catch (Throwable object) {

实际上你不想赶上Throwable,但可能ExceptionRuntimeException或者更具体的课程。

于 2013-06-29T15:58:57.037 回答
2

你只能抓住可以抛出的东西(IS-A Throwable)。因此,当您尝试捕获Object时,编译器会抱怨(因为它没有扩展Throwable)。

catch (Object o) // Error: Object IS-NOT Throwable

Throwable被所有类型的Errors和Exceptions继承。但是,我们通常不会捕获Errors,因为程序几乎总是无法从中恢复,例如OutOfMemoryError。所以catch (Throwable t) 推荐a。

使用时,catch (Exception e)您基本上可以对可能在运行期间抛出任何异常(选中或未选中)进行全面检查。使用或不使用通用 catch 通常取决于您要try阻止的操作。例如,在读取文件时,您希望处理和响应FileNotFoundException不同于EOFException.

于 2013-06-29T16:22:07.487 回答
0

所有异常和错误都扩展Throwable,只有那些可以被抛出和捕获。

你可以做

 try{
    throw new Exception();
  }catch(Exception e){
    // something here
  }catch(Throwable t){
    // something here
  }

当您编写多个 catch 块时,请记住以下几点

  • 您不能在超类类型之后编写子类类型。即如果你写catch(RuntimeException rt){}之后catch(Exception e){},那么你会得到它已经被捕获的编译器错误。
于 2013-06-29T15:59:21.990 回答