-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を拡張しないため)。Throwable

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

ThrowableErrorは、すべてのタイプの およびによって継承されますExceptionErrorしかし、プログラムはほとんどの場合 OutOfMemoryErrorなどから回復できないため、通常は s をキャッチしません。したがって、acatch (Throwable t) お勧めしません。

使用catch (Exception e)する場合、基本的に、実行中にスローされる可能性のある例外 ( checkedまたはun-checked )のすべてをキャッチします。一般的なキャッチを使用するかどうかは、通常、ブロックが何をしようとしているのかによって異なります。たとえば、ファイルを読み取るときは、と言うのではなく、別の方法で処理して応答したいと考えています。tryFileNotFoundExceptionEOFException

于 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){}AFTERを記述catch(Exception e){}すると、既にキャッチされているというコンパイラ エラーが発生します。
于 2013-06-29T15:59:21.990 に答える