5

3 つのステートメントを含む try ブロックがあり、それらすべてが例外を引き起こすとします。関連する catch ブロックで 3 つの例外すべてを処理したいのですが、可能ですか?

このようなもの-->

class multicatch
{
    public static void main(String[] args)
    {
        int[] c={1};
        String s="this is a false integer";
        try
        {
            int x=5/args.length;
            c[10]=12;
            int y=Integer.parseInt(s);
        }
        catch(ArithmeticException ae)
        {
            System.out.println("Cannot divide a number by zero.");
        }
        catch(ArrayIndexOutOfBoundsException abe)
        {
            System.out.println("This array index is not accessible.");
        }
        catch(NumberFormatException nfe)
        {
            System.out.println("Cannot parse a non-integer string.");
        }
    }
}

次の出力を取得することは可能ですか? -->>

Cannot divide a number by zero.
This array index is not accessible.
Cannot parse a non-integer string.
4

6 に答える 6

10

次の出力を取得することは可能ですか?

いいえ、例外の 1 つだけがスローされるためです。実行はtry、例外がスローされるとすぐにブロックを離れ、一致するcatchブロックがあると仮定して、そこで続行します。ブロックに戻らないtryため、2 番目の例外が発生することはありません。

例外処理の一般的なレッスンについてはJava チュートリアルを参照してください。詳細については、JLS のセクション 11.3 を参照してください。

于 2013-06-04T21:06:03.790 に答える
2

複数の例外をキャッチする場合は、コードを複数の try/catch ブロックに分割する必要があります。

より良いアプローチは、これを行うために例外をトリガーせずに、データを検証してエラーをログに記録することです。

于 2013-06-04T21:06:36.283 に答える
0

一度にすべての例外処理を表示することは不可能です。各例外の目的は、タイプcatchごとに異なる処理を行うExceptionことです。それ以外の場合は、それらをすべて一緒に出力しても意味がありません。

于 2013-06-04T21:32:05.807 に答える
0

いいえ 、

3 つの catch ステートメントすべてが実行されるわけではありません。TRYブロックはエラーをチェックし、実行は TRY ブロックから出てきます。その後、適切なキャッチが実行されます。あなたの場合、ArithmeticExceptionは例外階層の最上位にあります。したがって、実行されてからプログラムが終了します。

あなたが与えた場合、Catch(Exception e) before ArithmeticException then Exception catch が実行されます... MSDNで SystemException Hierarchies についてよく読んでください

于 2014-12-16T11:08:15.927 に答える
0

これは本当に悪い習慣ですが、次に行うことができます (finallyブロックを使用して問題を解決します):

private static void Main()
        {
            int[] c={1};
            String s="this is a false integer";
            try
            {
                int z = 0;
                int x = 5/z;
            }
            catch (ArithmeticException exception)
            {
                Console.WriteLine(exception.GetType().ToString());
            }
            finally
            {
                try
                {
                    c[10] = 12;
                }
                catch(IndexOutOfRangeException exception)
                {
                    Console.WriteLine(exception.GetType().ToString());
                }
                finally
                {
                    try
                    {
                        int y = int.Parse(s);
                    }
                    catch (FormatException exception)
                    {
                        Console.WriteLine(exception.GetType().ToString());
                    }
                }

                Console.ReadKey();
            }
        } 
于 2013-06-04T21:21:12.200 に答える