2016-07-19 10 views
0
enter code here 
    `class Rethrow 
    { 
    public static void genException() 
    { 
     int n[]={4,8,16,32,64,128}; 
     int d[]={2,0,8,0,4}; 

     for(int i=0;i<n.length;i++) 
     {          
      try{ 
       System.out.println("n/d is:"+n[i]/d[i]); 

       } 
      catch(ArithmeticException exc) 
       { 
       System.out.println("Cant Divide By Zero"); 
       throw exc; 
       } 
      catch(ArrayIndexOutOfBoundsException exc) 
      { 
       System.out.println("No match element found "); 
       // rethrow the exception 
      } 
     } 
    } 
} 

class RethrowDemo 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      Rethrow.genException(); 
     } 
     catch(ArithmeticException exc) // catch the rethrow Exception 
     { 
      // recatch exception 
      System.out.println("Fatal Error "+"Program Termiated."); 
     } 
    } 
} 

this is output of programWie kann die Ausnahme für die erneute Ausführung durch den äußeren Fang beendet werden?

Frage 1 :: warum Fang "RethrowDemo" CLASS eine Ausnahme von catch (Exception Arithmetic) von "Rethrow" Klasse geworfen beenden.

Frage 2 :: wie funktioniert die Übertragung der Kontrolle?

+3

Bitte Code formatiert werden. So wie es ist, kann ich die Blöcke nicht richtig sehen und kann daher nicht helfen. – Thomas

+0

Bitte teilen Sie Fehlerprotokoll für weitere Informationen. – Ajit

+4

Als Sie Ihre Frage stellten, gab es eine große orange ** Wie man formatiert ** Box rechts vom Textbereich mit nützlichen Informationen darin. Es gab auch eine komplette Symbolleiste mit Formatierungshilfen. Und eine ** [?] ** -Taste mit Formatierungshilfe. * Und * einen Vorschaubereich zwischen dem Textbereich und dem Post Your Question-Button (so dass Sie darüber scrollen müssen, um den Button zu finden, um Sie dazu anzuregen, ihn anzuschauen) und zeigen, wie Ihr Beitrag aussehen würde, wenn er gepostet wird . Wenn Sie Ihren Beitrag klarstellen und zeigen, dass Sie sich die Zeit genommen haben, verbessern Sie Ihre Chancen, gute Antworten zu erhalten. –

Antwort

0

In Java, wenn ein Ereignis eintritt, dass der normalen Fluss Ihrer Anwendung stört ein Exception Objekt erstellt wird, und es wird den Call-Stack übergibt bis zu entweder mit weiteren durch den Anrufer oder weitergegeben behandelt wird oben behandelt werden/Wird von etwas anderem in der Hierarchie gehandhabt.

Aufgrund der Tatsache, Sie nicht durch Null ein ArithmeticException teilen können, wird von der Linie System.out.println("n/d is:"+n[i]/d[i]); geworfen und da Sie diese in einem try...catch Block tun, Ihre catch(ArithmeticException exc) sagt: „Wenn es ein ArithmeticException aus den try geworfen wird dann Ich bin hier, um damit umzugehen ".

Es ist in diesem catch Block Sie drucken Cant Divide By Zero und dann werfen die ursprüngliche Ausnahme neu. Dies sprudelt dann zu der aufrufenden Methode auf, in Ihrem Fall zu der main Methode, aber da Sie den Anruf von innerhalb einer try...catch(ArithmeticException exc) machen, die catch in main sagt, dass "ich mit dem ArithmeticException befassen werde, das Sie gerade geworfen haben". An diesem Punkt drucken Sie dann Fatal Error Program Termiated und die Anwendung endet.

Es gibt viele Tutorials, die ausführlich erklären, wie Ausnahmen in Java funktionieren, so dass es nützlich wäre, einige zu betrachten.

A Tutorial on Exceptions

Another Tutorial on Exceptions

+0

thk für die Erläuterung !! –

+0

Gern geschehen. Wenn Sie das Gefühl haben, dass dies Ihre Frage beantwortet, denken Sie bitte daran, es anzunehmen :) – kstandell