2016-12-22 3 views
0

Ich bin auf eine Übung während der Vorbereitung meiner OCA gestoßen, ich verstehe nicht, warum das Programm drucken: anstelle von abcde 3. Hier das Programm:Ausnahme erneut in java

'public static void main(String[] args) { 
     System.out.print("a"); 
     try{ 
      System.out.print("b"); 
      throw new IllegalArgumentException(); 
      }catch(IllegalArgumentException e){ 
       System.out.print("c"); 
       throw new RuntimeException("1"); 
      }catch(RuntimeException e) { 
       System.out.print("d"); 
       throw new RuntimeException("2"); 
      }finally { 
      System.out.print("e"); 
      throw new RuntimeException("3"); 
      } 
     }' 

Irgendwelche Erklärungen, warum es die letzte catch-Block ignoriert werden wirklich zu schätzen!

+1

'Ein weiteres Problem ist, dass die Ausnahme in der letzten catch-Block geworfen wird einfach ignoriert oder maskiert von dem, der in den finally block geworfen wird. Ja, das ist ein Problem, aber es ist ein in Java eingebautes Problem :) Wirf keine Ausnahmen von finally-Blöcken. – biziclop

Antwort

5

finally A-Block ist immer nach einem try-catch Block ausgeführt, daher e gedruckt wird. abc sind offensichtlich, wie Sie eine Ausnahme in try werfen und den entsprechenden catch Block für IllegalArgumentException eingegeben wird.

Da jedoch eine neue Ausnahme RuntimeExceptionin den Catch-Block geworfen wird, wird es an den Aufrufer Ihrer Methode ausgelöst. Die catch Blöcke nur Ausnahmen in einem try Block geworfen behandelt, alle anderen werden an den Aufrufer der Funktion können Sie die Ausnahme werfen weitergegeben in.