2013-07-13 14 views
9

Sto cercando di capire perché devo l'eccezione throw nel metodo principale mentre ho i blocchi try/catch che possono comunque gestire tali eccezioni? Anche se si elimina la parte throws IllegalArgumentException,InputMismatchException, il programma verrà comunque compilato e funzionerà perfettamente.Eccezione di lancio nel metodo principale

public static void main(String[] args) throws IllegalArgumentException,InputMismatchException{ 
    boolean flag = true; 
    Scanner in = new Scanner(System.in); 
    do{ 
     try{ 
      System.out.println("Please enter the number:"); 
      int n = in.nextInt(); 
      int sum = range(n); 
      System.out.println("sum = " + sum); 
      flag = false; 
     } 
     catch(IllegalArgumentException e){ 
      System.out.println(e.getMessage()); 
     } 
     catch(InputMismatchException e){ 
      System.out.println("The number has to be as integer..."); 
      in.nextLine(); 
     } 
+8

Sei al mare e una persona sta affogando. L'eccezione è il tuo amico che dice 'Oh amico, guarda laggiù! Sta annegando! Dovremmo fare qualcosa? ". Nel tuo clausole 'catch' puoi definire il metodo' saveTheMan() 'A proposito, se c'è già un bagnino nei metodi che stai cercando di eseguire tra il costrutto' try', lì non è davvero necessario inserire il 'catch' clausole poiché il tuo aiuto sarà inutile. – Rob013

risposta

7

si lancia solo un'eccezione se si vuole che sia gestito da una funzione "superiore".

(Nota:.. L'eccezione non significa semplicemente sparire quando si è gettato Ha ancora essere gestito)

public void functionA() throws Exception{ 
    throw new Exception("This exception is going to be handled elsewhere"); 
} 

si utilizza un blocco try/catch quando si vuole gestire l'eccezione subito.

public void functionB(){ 
    try{ 
    throw new Exception("This exception is handled here."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 

Se si sta già utilizzando un blocco try/catch per intercettare un'eccezione, allora non avete bisogno di lanciare questa eccezione più in alto.

public void functionC() throws Exception{ 
    try{ 
    throw new Exception("This exception doesn't know where to go."); 
    }catch(Exception e){ 
    System.err.println("Exception caught: "+e); 
    } 
} 
1

A volte la parte chiamante non desidera che venga generata un'eccezione perché non desidera gestire tali eccezioni. In tali casi, includiamo il codice che può generare eccezioni con un blocco try catch finally.

Ma nei casi in cui si desidera catturare in modo specifico una determinata eccezione e provare a fare qualcosa al riguardo, o se si desidera lanciare un'eccezione del cliente alla parte chiamante, è necessario prima catturarla.

Si consiglia di non ingerire mai le eccezioni e anche di non catturare e rilanciare la stessa eccezione.

0

Le eccezioni controllate in modo preciso devono essere gestite. Il compilatore costringe a farlo. Puoi farlo sia con la frase try catch o by throws. Uno di questi è sufficiente.

Si ricorrere al primo approccio quando non si desidera gestire tale eccezione chiamando il codice.

3

Ogni metodo ha due scelte per affrontare le eccezioni che possono verificarsi in quel metodo:

La prima scelta è quella di gestire l'eccezione all'interno del metodo utilizzando un fermo e non dirlo a nessuno. Questo approccio è utile nella gestione degli errori, che non avranno alcun effetto sul metodo che lo chiama.

La seconda scelta consiste nel rilevare l'eccezione nel metodo, può o non può fare qualcosa per gestire l'eccezione. Inoltre, dì al metodo di chiamata che qualcosa è andato storto, quindi fai il necessario. Questo approccio è utile e dovrebbe essere usato per le eccezioni che stanno causando un problema che deve essere propagato sopra alla gerarchia chiamante.

Non credo sia davvero una buona idea lanciare eccezioni dal metodo principale . Perché anche se non lo lanci, JVM riceverà l'eccezione e uscirà. Il meglio che puoi fare è cercare di catturare le eccezioni e fare alcune azioni correttive all'interno del main. Se l'eccezione è catastrofica, indipendentemente dal fatto che la lanci o meno, il programma uscirà.

0

Si sta gestendo l'eccezione nel codice utilizzando try-catch. Questo è il motivo.

Problemi correlati