2014-09-26 3 views
5

quando un programmatore utilizzare un blocco try, senza catturacosa succede alle eccezioni quando provate ad usare il solo fine invece di prendere e come si gestisce?

come questo

PersistenceManager pm = PMF.get().getPersistenceManager(); 
    try { 
     pm.makePersistent(c); 
    } finally { 
     pm.close(); 
    } 

cosa succede ad eccezione e come, eventualmente, gestire più tardi?

cerco imparare da internet, ma senza risultato chiaro per essa ...

+1

per eccezioni non rilevate: http://www.javamex.com/tutorials/exceptions/exceptions_uncaught_handler.shtml – 9dan

+0

Tutorial, chiunque? (In ogni caso, cerca anche "try-with-resources".) – user2864740

risposta

1

Quando non si specifica un blocco catch si sta sostanzialmente spostando la responsabilità di gestire l'eccezione al chiamante del metodo.

Quindi, se il metodo non rileva una o più eccezioni dal blocco try e viene sollevata un'eccezione nel blocco del metodo, verrà restituita al chiamante.

Il blocco finally assicura che se qualcosa di brutto si verifica nel blocco try, almeno si avrà la possibilità di chiudere/rilasciare eventuali risorse correlate prima che l'eccezione venga restituita al chiamante.

1

Sì. Ha senso. Nel tuo caso arriva anche l'eccezione, il programmatore vuole semplicemente ignorare l'eccezione lanciata e chiudere lo PersistenceManager. A questo livello l'eccezione è ignorata e al primo livello qualcuno potrebbe prenderlo. Delega a lì.

1

l'istruzione catch viene utilizzata per rilevare l'eccezione specifica in base alle proprie necessità. Anche tu puoi usare l'eccezione generale in catch per catturare l'eccezione. Se utilizzi senza catch, l'eccezione verrà gestita di default.

1

A quel punto l'eccezione non viene gestita e continuerà a comparire. Dovrà essere gestito in seguito

1

Questo è un idioma comune per gestire (o meglio: non gestire) le eccezioni nel codice che alloca le risorse.

Se si verifica un'eccezione in un blocco try, questo blocco terminerà bruscamente. Quindi verrà recuperata una dichiarazione di cattura corrispondente. Se questo non viene trovato, il blocco esterno terminerà bruscamente, il che significa che il metodo genererà questa eccezione al chiamante.

Ma prima che un blocco finale verrà sempre eseguito dopo aver lasciato il blocco try (e anche dopo aver gestito un'eccezione rilevata). Questo è il posto migliore per smaltire le risorse allocate. In questo modo ti assicuri di ripulire dopo il lavoro, se si è verificata un'eccezione o meno.