2013-12-12 2 views

Antwort

0

Endlich wird IMMER ausgeführt, nach der Auswertung der Return-Anweisung.

+1

Nun, der Ausdruck in der Return-Anweisung wird noch vor der 'finally'-Klausel ausgewertet werden. –

2

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2

finally führt immer. Wenn es einen return in try gibt, den Rest von try und catch nicht ausführen, dann finally ausführt (von innersten nach äußersten), dann wird die Funktion beendet.

+3

Nicht genau. 'finally' wird nicht ausgeführt, wenn' System.exit() 'aufgerufen wird oder wenn die JVM abstürzt. – Maroun

+4

Ja, es wird nicht ausgeführt, wenn Sie den Computer von der Wand trennen. Es ist die gleiche Art von Situation, nicht wirklich notwendig, um sich zu qualifizieren. – Mumbleskates

+1

@Widdershins Oder wenn ein Dinosaurier Ihre Maschine essen wird. Der Aufruf von 'System.exit()' ist jedoch ein Fall, auf den Sie achten sollten. (Ich stimme der JVM-Absturz .. – Maroun

0

Was auch immer der Fall sein könnte finally wird immer ausgeführt. Im Falle einer erfolgreichen Ausführung von try wird catch Block nicht ausgeführt. Wenn try Blöcke wirft Ausnahme dann catch Block

0

Normalerweise Auftragsausführung ausführen, um von try-catch-finally ersten try ist, dann, wenn exception trows und gefangen wird die catchexecute. Wenn die Ausnahme abgefangen wird oder nicht, wird finally immer ausgeführt.

Wenn return in Ihrem try, wird die Ausführung in try dort stoppen und finally ausführen. wenn exception wirft und davor gefangen return normale Ausführungsreihenfolge folgt.

Lassen Sie uns laufen Code folgende

public static void main(String[] args) { 
    String[] arr=getInfo(); 
    for(String i:arr){ 
     System.out.println(i); 
    } 
} 

public static String[] getInfo(){ 
    String[] arr=new String[3]; 
    try { 
     arr[0]="try"; 
     return arr; 
    }catch (Exception e){ 
     arr[1]="catch"; 
     return arr; 
    }finally { 
     arr[2]="finally"; 
     return arr; 
    } 
} 

heraus gesetzt

try // return in try 
null 
finally // returning value in finally. 

diese nun aus der Sie alles setzen erklären. finally läuft, während es eine return in try gibt.

Wenn es eine System.exit(0) in Ihrem try, finally wird nicht ausgeführt werden.

0

Wenn es eine Rückgabe in try gibt, dann wird die Kontrolle gehen, um schließlich zu blockieren, den vorhandenen Code auszuführen und dann zu beenden. Also während dieser wenn in endlich Block gibt es irgendeine Änderung zu irgendeiner der Variablen, die in Versuch zurückgegeben werden, und wenn die gleiche Variable schließlich zurückgegeben wird, dann wird spätestes zurückgebracht.

try { 
      i = 11; 
      return i; 
      } catch (Exception e) { 
       // TODO: handle exception 
      } finally{ 

       i = 12; 
       return i; --> This will be returned 
      } 
     //return i; 


    } 

Aber wenn es nur Modifikation ist, wird der Wert zurückgegeben kein retrun in schließlich in Versuch der Endwert sein.

try { 
      i = 11; --> this will be returned 
      return i; 
      } catch (Exception e) { 
       // TODO: handle exception 
      } finally{ 

       i = 12; -- this will be executed 

      } 
     //return i; 


    } 
0

in try-catch Handhabung, wenn Sie return etwas von einem try Block, wird es .. aus dem Anwendungsbereich der try-catch-finally geht, weil catch-Block nur akzeptieren, was von try geworfen .. nicht das Ding, der zurückgegeben wird und jetzt, wenn Sie von dem try-Block zurückgekehrt sind, wird es das try-Ende nicht erreichen und wird schließlich nicht ausgeführt werden, es wird try-catch-finally Block, zurück zu Ihrem Code gehen.

Verwandte Themen