-4
public class Confusion {
    Confusion(int i) {
        int j = 5;
        int[] a = new int[2];
        try {
            a[0] = 4;
            if (i <= 0) {
                int k = j / i;
            } else {
                System.out.println(j / i);
            }
        } catch (ArithmeticException sa) {
            System.out.println("Wrong value" + sa);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("out of range massage in Class");
        } finally {
            System.out.println("Executing finally block in code");
        }
    }

    void k() {
        int[] a = new int[2];
        {
            try {
                a[4] = 4;
            } catch (ArrayIndexOutOfBoundsException e) {
                System.out.println("out of range");
            }
        }
    }
}

public class Nested {
    public static void main(String[] args) {
        Confusion c = new Confusion(2);
        Confusion c1 = new Confusion(0);
        c1.k();
        c.k();
    }
}

出力:

-2
Executing finally block in code
Wrong valuejava.lang.ArithmeticException: / by zero
Executing finally block in code
out of range
out of range

finally{}以下のコードで記述されたブロックを実行すると、 2 回実行されます。なぜこれが起こっているのか分かりません。finally ブロックを 1 回だけ実行したい。単一のメソッドで複数の例外をスローする方法はありますか?

4

7 に答える 7

0

2 つの Confusion オブジェクトを作成しているためです。したがって、finally ブロックは 2 回実行されます。

confusion c=new confusion(2);
confusion c1=new confusion(0);

最後に一度だけ実行したい場合は、このコードを試してください

 public class Confusion {
    Confusion(int i) {
        int j = 5;
        int[] a = new int[2];
        a[0] = 4;
        if (i <= 0) {
           int k = j / i;
        } else {
           System.out.println(j / i);
        }
    }

    void k() {
       int[] a = new int[2];
            a[4] = 4;
   }
}

public class Nested {
   public static void main(String[] args) {
      try{
           Confusion c = new Confusion(2);
           Confusion c1 = new Confusion(0);
           c1.k();
           c.k();
         }catch (ArithmeticException sa) {
            System.out.println("Wrong value" + sa);
         } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("out of range massage in Class");
        } finally {
            System.out.println("Executing finally block in code");
        }
     }
  }
于 2013-08-27T09:00:30.057 に答える