Gestione delle eccezioni in Java: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (9), </source> → </syntaxhighlight> (9) |
m Bot: inserimento portale (via JWB) |
||
(3 versioni intermedie di 2 utenti non mostrate) | |||
Riga 1:
{{NN|informatica|febbraio 2013}}
{{torna a|Java (linguaggio di programmazione)}}
Nel [[linguaggio di programmazione]] ''[[Programmazione orientata agli oggetti|object-oriented]]'' [[Java (linguaggio di programmazione)|Java]], il sistema di '''gestione delle eccezioni''' (o '''exception handling''') è costituito da un insieme di costrutti e regole [[sintassi (informatica)|sintattiche]] e [[semantica (informatica)|semantiche]] introdotte allo scopo di rendere più semplice, chiara e sicura la gestione di eventuali ''situazioni anomale'', dette [[eccezione (informatica)|eccezioni]], che si possono verificare durante l'[[esecuzione (informatica)|esecuzione]] di un [[Programma (informatica)|programma]].
Riga 66:
In sostanza, il blocco try-catch consente di ''separare'' accuratamente il funzionamento del metodo nel caso "normale" (blocco try) e la gestione di situazioni anomale (blocco catch).
=== Il blocco finally ===
Come altri linguaggi, Java supporta un terzo blocco chiamato <syntaxhighlight lang="java" inline>finally</syntaxhighlight>. Questo blocco verrà eseguito sempre, a prescindere dal fatto che l'esecuzione del blocco try abbia generato o meno un'eccezione, e a prescindere da ciò che accade nel blocco catch.<ref>{{Cita web|lingua=en|url=https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html|titolo=The finally Block|opera=Java Documentation|editore=[[Oracle Corporation]]|urlarchivio=https://web.archive.org/web/20240127154417/https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html|urlmorto=no|accesso=20 marzo 2024|dataarchivio=27 gennaio 2024}}</ref>
La sintassi è la seguente:
<syntaxhighlight lang="java">▼
// codice che può generare un'eccezione
} catch (ClasseEccezione e) {
// gestisci l'eccezione
} finally {
// codice da eseguire in ogni caso
}▼
</syntaxhighlight>▼
Un metodo può sollevare più tipi di eccezione. Per esempio, un metodo che deve accedere a file potrebbe prevedere diverse segnalazioni di anomalie che rappresentano il fatto che il file non esista oppure che i suoi contenuti risultino danneggiati o scorretti:▼
<syntaxhighlight lang="java">▼
public int leggiFile() throws FileInesistente, FileDanneggiato {▼
...▼
}▼
</syntaxhighlight>▼
Analogamente, un blocco try-catch può comprendere più blocchi catch dedicati a gestire diversi tipi di eccezioni:▼
<syntaxhighlight lang="java">
public faiQualcosa2() {▼
leggiFile();▼
} catch (FileInesistente fi) {▼
System.out.println("Ooops! Il file " + fi.getNomeFile() + " non esiste!");▼
} catch (FileDanneggiato fd) {▼
System.out.println("Ooops! Il file " + fd.getNomeFile() + " contiene dati scorretti!");▼
}
}
</syntaxhighlight>
== La regola "handle or declare" ==
Riga 142 ⟶ 179:
L'identificatore <code>dnv</code> che compare nella clausola <code>catch</code> gioca un ruolo analogo a quello di un [[parametro (informatica)|parametro]] di un metodo. Esso cioè identifica un ''[[riferimento in Java|reference]]'' a cui viene assegnato l'oggetto-eccezione "lanciato" dall'istruzione <code>throw</code>. Tale oggetto può quindi essere manipolato come un oggetto qualsiasi, per esempio per estrarne informazione.
▲== Eccezioni e catch multiple ==
▲Un metodo può sollevare più tipi di eccezione. Per esempio, un metodo che deve accedere a file potrebbe prevedere diverse segnalazioni di anomalie che rappresentano il fatto che il file non esista oppure che i suoi contenuti risultino danneggiati o scorretti:
▲<syntaxhighlight lang="java">
▲public int leggiFile() throws FileInesistente, FileDanneggiato {
▲ ...
▲}
▲</syntaxhighlight>
▲Analogamente, un blocco try-catch può comprendere più blocchi catch dedicati a gestire diversi tipi di eccezioni:
▲<syntaxhighlight lang="java">
▲public faiQualcosa2() {
▲ try {
▲ leggiFile();
▲ } catch (FileInesistente fi) {
▲ System.out.println("Ooops! Il file " + fi.getNomeFile() + " non esiste!");
▲ } catch (FileDanneggiato fd) {
▲ System.out.println("Ooops! Il file " + fd.getNomeFile() + " contiene dati scorretti!");
▲ }
▲}
▲</syntaxhighlight>
== Eccezioni e polimorfismo ==
Riga 209 ⟶ 223:
Le ''Exception'' sono invece le eccezioni che possono essere gestite. La sottoclasse ''RuntimeException'' rappresenta quelle eccezioni che vengono sollevate dalla [[macchina virtuale Java]] (e quindi ''non'' da una istruzione ''throw'' del programma). Per esempio, il tentativo da parte del programma di usare un reference di valore [[null]] comporta la segnalazione di una ''RuntimeException'' da parte della JVM. Queste eccezioni ''possono'' essere catturate e gestite. Tuttavia, essendo in un certo senso eccezioni ''spontanee'' (non generate esplicitamente dal programma), esse non vengono dichiarate nelle clausole ''throws'' (in un certo senso, si assume che qualunque metodo possa incorrere in anomalie di questo genere, per cui dichiarare questa possibilità in modo sistematico, con il conseguente obbligo di gestione dato dalla regola [[handle or declare]], diverrebbe troppo oneroso).
== Note ==
<references/>
== Voci correlate ==
Riga 215 ⟶ 232:
== Altri progetti ==
{{Interprogetto}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{Cita web|lingua=en|url=https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html|titolo=Lesson: Exception|opera=Java Documentation|editore=[[Oracle Corporation]]|urlarchivio=https://web.archive.org/web/20240127024950/https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html|urlmorto=no|accesso=20 marzo 2024|dataarchivio=27 gennaio 2024}}
* {{Cita web|lingua=en|url=https://www.w3schools.com/java/java_try_catch.asp|titolo=Java Exceptions (Try...Catch)|urlarchivio=https://web.archive.org/web/20240319040816/https://www.w3schools.com/java/java_try_catch.asp|urlmorto=no|accesso=20 marzo 2024|dataarchivio=19 marzo 2024}}
{{Portale|informatica}}
[[Categoria:Java]]
|