Il unica scopo di try
/catch
è il controllo di flusso. Ha lo scopo di permetterci di uscire da qualsiasi loop e persino di superare il chiamante e fino a una funzione di livello superiore.
Tuttavia, è progettato per condizioni eccezionali, come i riferimenti null in uso, il sovraccarico di divisione o l'errore di I/O di file. Si tratta di errori che impediscono al programma di continuare e deve essere gestito da. Generalmente, sono difficili da prevedere o sono molto rari.
Quando si verifica una condizione eccezionale, la cosa migliore da fare è modificare il flusso di controllo in modo che l'eccezione sia lanciata fino in fondo come deve essere al fine di trovare un blocco catch disposto a gestirlo. Qualsiasi metodo nel mezzo viene interrotto e svolto, anche se non ha codice per verificare i risultati.
Quando le persone si lamentano utilizzando try
/catch
per il controllo del flusso, quello che dovrebbe dire è che non è per il controllo del flusso in condizioni non eccezionali. Se tutto ciò che vuoi fare è uscire da un loop, usa break
o return
; non lanciare un'eccezione e poi prenderla. Questo non è ciò che le eccezioni sono per, né è ciò per cui sono buoni.
fonte
2010-08-18 19:53:56
+1 alla risposta di John Weldon. Si noti che uno degli aspetti veramente sgradevoli di una parte dell'ecosistema Java (e che è una specificità Java) è l'uso eccessivo di ** check ** delle eccezioni da parte di alcune API/framework. Fondamentalmente costringendo gli utenti API a controllare il flusso del loro programma catturando l'eccezione senza checkless per cose che non sono affatto eccezionali. Alcune strutture, come Spring, sono progettate correttamente e veramente disapprovano quella terribile pratica. Joshua Bloch nel suo * Java efficace * raccomanda di preferire un "metodo di test dello stato" per lanciare inutilmente (un) le eccezioni controllate in giro. – NoozNooz42
Ciao Grazie per la risposta. "In pratica costringiamo gli utenti API a controllare il flusso del loro programma rilevando un'eccezione senza checkless per cose che non sono affatto eccezionali". Quindi questa è la differenza nel try-catch tra C++/Java? Inoltre, cosa intendi per eccezioni "controllate"? Cheers – Muggen
Vedi http://www.javapractices.com/topic/TopicAction.do?Id=129. Le eccezioni controllate sono essenzialmente un abuso di eccezioni per il controllo del flusso non eccezionale. Sono anche un incubo di manutenzione. –