Anteprima
Vedrai una selezione di 7 pagine su 30
Appunti di Programmazione ad oggetti Pag. 1 Appunti di Programmazione ad oggetti Pag. 2
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti di Programmazione ad oggetti Pag. 6
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti di Programmazione ad oggetti Pag. 11
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti di Programmazione ad oggetti Pag. 16
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti di Programmazione ad oggetti Pag. 21
Anteprima di 7 pagg. su 30.
Scarica il documento per vederlo tutto.
Appunti di Programmazione ad oggetti Pag. 26
1 su 30
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Gestione delle eccezioni in Java

In altre parole, un'eccezione è un errore di runtime.

Basi sulla gestione delle eccezioni

Un'eccezione Java è un oggetto che descrive una condizione eccezionale (errore) che si è verificato nel codice. Quando si verifica un'eccezione viene creato un oggetto che rappresenta tale eccezione e lanciato nel metodo che ha causato l'errore. Tale metodo può scegliere di gestire l'eccezione o di passarla. In ogni caso, ad un certo punto, l'eccezione viene intercettata ed elaborata.

Tipi di eccezioni

Tutti i tipi di eccezioni sono sottoclassi della classe Throwable. Quindi Throwable si trova in cima alla gerarchia di classi di eccezioni. Appena sotto Throwable si trova Exception ed Error. Exception si utilizza per condizioni eccezionali che i programmi utente devono intercettare. Si tratta anche della classe usata per creare sottoclassi di eccezioni personalizzate. Sotto Exception si trova RuntimeException che è molto importante dato

che gestisce ad esempio le divisioni per zero o indicizzazioni di array non valide. Error definisce le eccezioni che non si prevedono siano intercettate in condizioni normali di programma (es. overflow di stack) e di solito sono legate ad errori catastrofici. Non verranno trattate.

176.3 Eccezioni non intercettate

Qualsiasi eccezione non intercettata viene intercettata dal gestore predefinito di Java. Esso visualizza una stringa che descrive l'eccezione, stampa un traccia di stack (stack trace) dal punto in cui si è verificata l'eccezione e termina il programma.

6.4 Utilizzo di try e catch

Per gestire eccezioni di conto proprio, potendo così correggere l'errore e impedire la terminazione automatica del programma, si usa il costrutto try-catch. Per proteggersi da un errore di runtime e gestirlo, racchiudere il codice da monitorare in un blocco try. Subito dopo il blocco try inserire una clausola catch che specifichi il tipo di eccezione da intercettare. Quando si


verifica un eccezione all'interno del blocco try, il codice successivo alla riga (nel try) dovesi è verificata l'eccezione non viene eseguito.
L'ambito della clausola catch è limitato alle dichiarazioni specificate dalla dichiarazione try immedia-tamente precedente.

Esempio:

<pre>
<code>
class Test {
    public static void main(String args[]) {
        int a;
        try{
            a = 15/0;
            System.out.printn("Questo non viene stampato");
        }
        catch (ArithmeticException e) {
            System.out.println("ERRORE! Divisione per zero");
        }
        System.out.println("Dopo il catch");
    }
}
</code>
</pre>

L'outuput è : ERRORE! Divisione per zero! Dopo il catch

6.4.1 Visualizzazione della descrizione di un'eccezione
Throable ridefinisce il metodo toString() in modo da restituire una stringa contenente una descrizione
dell'eccezione. Nel blocco catch passando come argomento ad un println() l'eccezione, è possibile
stampare la descrizione di essa.

6.5 Clausole catch multiple

Una singola parte di codice può sollevare più eccezioni, si possono usare più clausole catch in serie. Bisogna fare attenzione che quando si utilizzano i catch multipli, le sottoclassi di eccezioni devono trovarsi prima delle relative superclassi. Questo perché una dichiarazione catch che utilizza una superclasse intercetta le eccezioni di tale tipo, oltre a quelle delle sottoclassi.

6.6 Dichiarazioni try annidate

Una dichiarazione try si può trovare all'interno del blocco di un'altra dichiarazione try. Ogni qualvolta si entra in una dichiarazione try, il contesto dell'eccezione viene inserito nello stack. Se una dichiarazione try interna non dispone di un gestore catch per una particolare eccezione, lo stack viene svolto e si esaminano per la corrispondenza i gestori catch della dichiarazione try successiva.

In parole povere, lo stack trace è un elenco delle chiamate del metodo che l'applicazione era nel mezzo di quando è stata generata un'eccezione.

186.7 Throw

Fino ad ora sono state intercettate solo eccezioni lanciate da sistema runtime di Java. E’ possibile tuttavia che il programma lanci un’eccezione esplicitamente, mediante la dichiarazione throw. La forma generale è:

throw IstanzaThrowable;

IstanzaThrowable deve essere un oggetto di tipo Throwable o una sottoclasse di Throwable.

Esistono due modi per ottenere un oggetto Throwable: mediante un parametro in una clausola catch oppure creandone uno con l’operatore new.

Esempio:

try {
    throw new NullPointerException("prova");
}
catch (NullPointerException e) {
    System.out.println("Catchato NullPointerException");
    throw e; //Rilancio di nuovo l’eccezione
}

6.8 Throws

Se un metodo è in grado di causare un’eccezione che non gestisce, deve specificare tale comportamento, in modo che i chiamanti del metodo possano proteggersi da tale eccezione. L’operazione si effettua inserendo una clausola throws nella dichiarazione del metodo.

public abstract JSONObject ranking(String type, String initialDate, String finalDate) throws FileNotFoundException, JSONException, IOException, ParseException, WrongParameterException, WrongFieldException, EmptyListException, FileManagementException;
6.9 Finally
Quando vengono lanciate eccezioni, l'esecuzione in un metodo imbocca un percorso non lineare che altera il normale flusso nel metodo. Secondo la codifica del metodo, è anche possibile che un'eccezione faccia tornare il metodo prematuramente.
Ad esempio un metodo che apre un file all'entrata e lo chiude all'uscita, non si desidera che il codice che chiude il file sia

Il testo formattato con tag HTML:

saltato dal meccanismo di gestione delle eccezioni. La parola chiave finally è utile in questi casi. finally crea un blocco di codice che viene eseguito al completamento di un blocco try-catch e prima del codice successivo al blocco try-catch. Il blocco finally viene eseguito sempre, che sia lanciata o no un'eccezione. La clausola finally è facoltativa, tuttavia ogni dichiarazione try richiede almeno una clausola catch o finally.

6.10 Creazione di sottoclassi di eccezioni

Sebbene le eccezioni incorporate di Java gestiscano gli errori più comuni, si può desiderare di creare i propri tipi di eccezioni per la gestione di situazioni specifiche per le proprie applicazioni. Si può fare facilmente definendo una sottoclasse di Exception (che è una sottoclasse di Throwable). Le sottoclassi non devono implementare nulla: la loro esistenza nel sistema di tipo consente di utilizzarle come eccezioni.

7 Strutture dati

Una struttura dati è un'entità usata per organizzare un insieme di

  1. dati.Fino ad ora si sono visti solo gli array che però organizza dati omogenei (dello stesso tipo) come in unelenco.
  2. La struttura dati array non è dinamica, infatti la sua dimensione è fissata al momento della creazione.
  3. Java fornisce alcune strutture dati dinamiche, ossia strutture la sua dimensione può variare nel tempo.
  4. Tali strutture sono implementate come classi nella Libreria Standard di Java. Tutte queste classi fanoparte del package java.util (che si dovrà importare).
  5. 7.1 Classe Vector
  6. Una versione dinamica degli array è fornita dalle classi ArrayList e Vector. Tali classi sono simili tradi solo.
  7. Considerando la classe Vector, per creare un oggetto di tale classe si scrive: Vector<tipo> nomeArray = new Vector <tipo>();
  8. Essendo la classe Vector generica, si deve specificare il tipo tra < ... >. Non è necessario inoltrespecificare la dimensione (all’inizio il vettore è vuoto).
  9. Si possono inserire e leggere elementi di Vector con i metodi set(int index,

E element) e get(int index). Per aggiungere semplicemente un elemento in fondo al vettore si usa add(E element). Esiste anche il metodo size() che ritorna la dimensione dell'array. Siccome la classe Vector si aspetta come tipo per i suoi elementi (tra < ... >) un tipo classe, per usare tipi primitivi bisogna usare le cosiddette classi involucro (ad esempio Integer per int, Double per double, Character per char...). Java si occuperà di trasformare automaticamente i valori dei tipi primitivi nei rispettivi oggetti (autoboxing) e viceversa (autounboxing).

7.2 Collections

La libreria standard di Java fornisce una serie di classi che consentono di lavorare con gruppi di oggetti (collezioni). Tali classi della libreria standard prendono il nome di Java Collections Framework (sono tutte contenute nel package java.util). La classe Vector vista prima fa parte del Java Collections Framework. Il Java Collections Framework prevede due tipologie principali di collezione: insiemi e liste.

Un insieme corrisponde a un gruppo di oggetti tutti distinti tra loro. Gli elementi in genere non sono ordinati, però ci sono modi per farlo.

  • Una lista corrisponde a un gruppo di oggetti in cui si possono avere elementi ripetuti. Gli elementi mantengono l'ordine di inserimento.

La seguente immagine illustrerà molto chiaramente la composizione di tale Framework:

20• Collection è l'interfaccia che descrive genericamente le funzionalità di una collezione.

  • Set, che estende Collection, è un'interfaccia che descrive le funzionalità di un insieme. Non ammette elementi duplicati e non ha una nozione di sequenza o di posizione.
  • HashSet implementa l'interfaccia Set non mantenendo gli elementi in nessun ordine particolare. E' l'implementazione di Set che viene utilizzata più comunemente. La classe HashSet è implementata in modo da rendere particolarmente efficienti le operazioni di inserimento, ricerca e cancellazione di un elemento.
Utilizza al suo interno una tabella hash che rappresenta un insieme come un array di liste∗ TreeSet implementa l'interfaccia Set mantenendo gli elementi secondo un loro ordine naturale (ordinamento numerico, lessicografico...). È l'implementazione di Set che viene utilizzata quando è utile mantenere gli elementi ordinati secondo il loro ordine naturale. È implementata in modo da rendere per quanto possibile efficienti le operazioni di inserimento, ricerca e cancellazione di un elemento (utilizza al suo interno una rappresentazione ad albero). List, che è un'altra estensione di Collection, è un'interfaccia che descrive le funzionalità di una lista. Tipicamente ammette elementi duplicati. In quanto sequenza, ha una nozione di posizione. Vector e ArrayList sono implementazioni di List che utilizzano un array per memorizzare gli elementi.
Dettagli
Publisher
A.A. 2021-2022
30 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher dennisrapa di informazioni apprese con la frequenza delle lezioni di Programmazione ad oggetti e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università Politecnica delle Marche - Ancona o del prof Frontoni Emanuele.