Un errore indica che c'è un problema con il programma. Un'eccezione è un costrutto specifico che interrompe il flusso di controllo del programma e svolge lo stack, acquisendo informazioni sullo stato dello stack in modo che possa essere segnalato.
Un'eccezione può essere utilizzata per indicare un errore, ma non sempre.Ad esempio:
void startOperation() {
try {
while (someComplexOperationIsOnGoing()) {
checkRestart();
}
}
catch (RestartException re) {
startOperation();
}
}
void checkRestart() {
if (shouldRestart()) {
throw new RestartException();
}
}
Questo esempio di codice incompleto è destinato a mostrare un caso in cui un'eccezione non è un errore. Questa non è sempre la migliore pratica; ma è usato in alcuni casi in cui l'intento è quello di interrompere il flusso di controllo in profondità nel programma (come il reindirizzamento della pagina in un framework web, quando risponde a una richiesta HTTP) e restituire il controllo a un livello più alto dello stack . L'espressione l'eccezione fa riferimento al meccanismo che interrompe il programma.
In java, esiste una classe Eccezione che incapsula questo comportamento. La classe Errore interrompe anche il flusso di controllo allo stesso modo di un'eccezione; ma è riservato solo a problemi gravi e irrecuperabili che avvengono in fase di esecuzione. Viene utilizzato, ad esempio, quando la JVM esaurisce la memoria e non può creare nuovi oggetti.
@All: Perché chiamiamo "eccezioni in fase di compilazione' e non" errore in fase di compilazione', come "eccezioni controllate" ?? –
Un'eccezione non è sempre un problema con il programma. Il termine "eccezione" ha un significato tecnico specifico nel contesto di un programma per computer. Vedi la spiegazione che ho postato. – RMorrisey