2016-04-11 5 views
-1
public class Main { 

    public static void main(String[] args) { 
     System.out.println("Normal: " + testNormal()); 
     System.out.println("Exception: " + testException()); 
    } 

    public static int testNormal() { 
     try { 
      // no exception 
      return 0; 
     } catch (Exception e) { 
      System.out.println("[normal] Exception caught"); 
     } finally { 
      System.out.println("[normal] Finally"); 
     } 
     System.out.println("[normal] Rest of code"); 
     return -1; 
    } 

    public static int testException() { 
     try { 
      throw new Exception(); 
     } catch (Exception e) { 
      System.out.println("[except] Exception caught"); 
     } finally { 
      System.out.println("[except] Finally"); 
     } 
     System.out.println("[except] Rest of code"); 
     return -1; 
    } 

} 

Warum wird "[normal] Rest of Code" nicht ausgeführt und "[except] Rest of code" wird nicht ausgeführt? Bitte erkläre.Erklären Sie den Unterschied in der Codeausführung

+1

Welchen Teil der Aufgabe verstehen Sie nicht? –

+1

Was denkst du 'return 0;' tut? – Savior

+0

'[außer] Rest des Codes' wird ausgeführt. – Savior

Antwort

2
  1. testNormal. Die 0 von return 0 wird irgendwo gespeichert, der Code im finally Block lief, dann wird der gespeicherte Wert zurückgegeben.

  2. testException. Die Ausnahme wird ausgelöst. Der Code in der catch ist ran. Dann wird der Code im finally Block ausgeführt. Die Programmsteuerung wird dann von System.out.println fortgesetzt und -1 zurückgegeben.

Ein interessanter ist der Fall, wenn finally selbst ein return enthält. In diesem Fall wird der Rückgabewert im Block finally zurückgegeben und jeder gespeicherte Wert, der von einem vorherigen return gefunden wurde, wird verworfen.