Javadoc ed Eccezioni - Laboratorio di...

47
Javadoc ed Eccezioni Lettura e Scrittura su file Commentare il codice: Javadoc Eccezioni Javadoc ed Eccezioni Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Transcript of Javadoc ed Eccezioni - Laboratorio di...

Page 1: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Javadoc ed EccezioniLaboratorio di Programmazione IICorso di Laurea in Bioinformatica

Dipartimento di Informatica - Università di Verona

Page 2: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Sommario

Lettura e scrittura su fileJavadocEccezioni in Java

Page 3: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Lettura e Scrittura su file

Page 4: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Scrittura su file

Scrittura su file di testoScrivere stringhe su file di testoUsiamo gli oggetti FileWriter e PrintWriter

1 FileWriter apre un file in scrittura, ha come parametro ilnome del file

2 PrintWriter mette a disposizioni metodi di scrittura pertesto (print, println), ha come parametro un oggettoFileWriter

a scrittura terminata dobbiamo chiudere il file ed il canaledi scritturadobbiamo importare alcune classi del package diinput-output:

import java.io.*;

Page 5: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Scrittura su file: Esempio

Example (Esempio scrittura su file di testo)

1 apertura del file in scrittura / creazione del fileFileWriter f = new FileWriter("prova.txt");PrintWriter out = new PrintWriter(f);

2 scrittura di testoout.println("scrivo su file");

3 chiusura del canale di scrittura e del fileout.close();f.close();

Page 6: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Scrittura su file

NoteFileWriter crea un file pronto per essere scritto.Se il file già esiste viene preliminarmente eliminato tutto ilsuo contenuto.Per aggiungere testo ad un file già esistente:

si usa FileWriter(String, boolean) ponendo il secondoargomento a true.

EsempioFile.java

Page 7: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Schema di ciclo di scrittura

Ciclo di scrittura su filePrintWriter out = ...while (condizione) {

out.println(dato);aggiorna condizione...

}out.close();

Esempio scrittura 10 stringhe di testo

FileWriter f = new FileWriter(nomefile);PrintWriter out = new PrintWriter(f);int i = 0;while(i<10){

out.println("stringa "+i);i++;

}out.close();f.close();

Page 8: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Lettura da file

Leggere stringhe da file di testo1 Usiamo gli oggetti FileReader e BufferedReader

FileReader apre un file in lettura, accetta come parametroil nome del fileBufferedReader mette a disposizione metodi per la letturadi stringhe di testo (e.g., readLine()) accetta comeparametro un oggetto FileReader

2 Leggiamo una linea alla volta con il metodo readLine()della classe BufferedReader

3 Chiudiamo il file ed il canale di input

EsempioFile.java

Page 9: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Lettura da file: Esempio

Example (Esempio lettura da file di testo)

1 apertura del file in letturaFileReader f = new FileReader("prova.txt");BufferedReader in = new BufferedReader(f);

2 lettura di una riga del fileString line = in.readLine();

3 chiusura del filef.close();in.close();

Page 10: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Schema di ciclo di lettura

Ciclo di lettura da fileBufferedReader in = ...String linea = in.readLine();while (linea!=null) {

...linea = in.readLine();

}

Esempio: contare le linee di un file

FileReader f = new FileReader(nomefile);BufferedReader in = new BufferedReader(f);int n = 0;String linea = in.readLine();while (linea!=null) {

n++;linea = in.readLine();

}f.close();in.close();

Page 11: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esercizi

Esercizi su scrittura e letturaImplementare i metodi:

stampaStudenteFile(...)

calcolaMediaStudenti(...)

copiaStudentiInMedia(...)

della classe ClienteStudenteBase.java.

Scaricare il file StudenteBase.java ed il file di testo studenti.txtper verificare il corretto funzionamento dei metodi.

Page 12: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Commentare il codice:Javadoc

Page 13: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Premessa

I commenti nel codiceI commenti sono fondamentali per il riuso del softwareAlcune informazioni sono chiare dal codice (ad esempiol’interfaccia)Altre importanti informazioni sono meno chiare (adesempio il contratto)Javadoc: genera la documentazione (e.g., HTML o PDF)dai commenti

Page 14: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Formato Javadoc

JavadocCommento Javadoc: testo HTML tra i tag: /** e */

Example (Commento Javadoc)

/*** Commento <em>Javadoc</em>* Spazi ed asterischi a inizio riga* sono <strong>sempre</strong> ignorati*/

Risultato:Commento JavadocSpazi ed asterischi a inizio riga sono sempre ignorati

Page 15: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Cosa commentare

Scopo dei commentiCommentare tutto ciò che può essere utile a farcomprendere il codice al lettore (programmatori ed utenti)Documentazione minima:

ciascun package, classe ed interfacciaciasun metodo ed attributo pubblico

Page 16: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Come commentare

Scopo dei commentiI commenti vengono posti prima della dichiarazione delcodice che si vuole commentare (classe, metodo, etc.)Un commento deve descrivere in modo sintetico quale è loscopo del codiceUn commento Javadoc può contenere tag speciali (nonHTML) che aiutano ad organizzare il commento

Page 17: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esempio Javadoc

Esempio

Page 18: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esempio Javadoc: discussione

Esempio: discussioneprimo paragrafo riassume lo scopo del metodo.paragrafi successivi sono suddivisi da <p>.Una riga vuota separa la parte descrittiva dalla parte deitag. Deve esserci solo 1 riga vuota in tutto.Una seconda parte in cui sono inseriti tag speciali (e.g.,@<nome>) che identificano le componenti dell’oggettoche si sta commentando.

Page 19: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Tag Javadoc

Tag JavadocFormato generale di un tag: @name commentname specifica quale tipo di informazione si sta dandocomment è l’informazione:e.g. @author William ShakespeareOgni tag deve essere su una riga nuova.I commenti possono estendersi su più righe, ma non cidevono essere righe vuote!

Page 20: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Tag Javadoc

Tag JavadocOrdine Tag: Tag Classi, Tag Metodi

Tag classi:@author <autore> il nome di chi ha scritto il programma.

Se ci sono più autori, si mettono più tag su righe separateAppare solo se javadoc viene compilato con l’opzione–author

@version <versione> la versione del codiceappare solo se javadoc viene compilato con l’opzione–version

Page 21: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Tag Javadoc

Tag JavadocTag Metodi:

@param <nome parametro> breve descrizione delparametro.

Se ci sono più parametri, rispettare l’ordine con cui sonodichiarati.

@return breve descrizione di ciò che è tornato dal metodo.Esempio: @return true if the value was found in the array

@exception <nome eccezione> descrizione dellecircostanze che determinano il lancio dell’eccezione.

Page 22: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Come si compila

Compilare con javadocIl comando per estrarre la documentazione è javadocpresente in tutte le Java Development Kit (JDK)Il comando javadoc può produrre la documentazione indiversi formati, ciascuno dei quali può richiedere dei file diistruzioni speciali (i cosidetti doclet)Il formato standard è HTML e non richiede nessun fileausiliario.Il comando da lanciare è il seguente: javadoc [parametri] -d<DirectoryDestinazione> <NomeFile.java>Ad esempio:javadoc -private -d mydocs/ Insegnamento.java

Page 23: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Informazioni aggiuntive

Ulteriori dettagliSe si vuole la documentazione in PDF è necessariospecificare una doclet in grado di istruire Javadoc su comeprodurre un PDF (e.g. PdfDoclet )Leggere sun doc per un’esauriente spiegazione di come sidevono scrivere i commenti Javadoc.Commentare sempre il codice con javadoc anche in seded’esame.

Page 24: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esercizi

Esercizi: commentiCommentare la classe Insegnamento.java in javadocGenerare la documentazione in htmlsoluzione: Insegnamento.sol

Page 25: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Eccezioni

Page 26: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esigenza eccezioni

EccezioniPermettono di gestire condizioni al di fuori dei parametrioperativi di un metodoEsempi tipici: errori di input, dati non disponibili, dati nonvalidi etc.Tali condizioni non possono sempre essere gestiteall’interno del metodoEccezioni: meccanismo ben definito per gestire talisituazioni

Page 27: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esempio

Example (Ricerca massimo reali da input)

Il metodo assume che l’utente inserisca sempre almeno undatoCosa succede se l’utente decide di non inserire nulla ?Exception in thread "main"java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scanner.next(Scanner.java:1461)at java.util.Scanner.nextDouble(Scanner.java:2387)at lezione1.MassimoReali.main(MassimoReali.java:12)

Page 28: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Definizione Eccezione

DefinizioneOggetto creato dalla JVM a seguito di una situazioneanomalaL’oggetto contiene le informazioni riguardanti la situazioneanomala che ha generato l’eccezioneUn modulo può generare un’eccezione quando si verifica lacondizione anomala (throw)Un modulo può gestire un’eccezione generata da qualchealtro modulo (catch)Nella gestione di un’eccezione un modulo può generare unanuova eccezione che viene gestita da qualche altro modulo

Page 29: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Costrutto Java per le eccezioni

La classe ThrowableThrowable: la superclasse per tutte le eccezioniError: sottoclasse di Throwable rappresenta eccezioni chepossono essere ignorate dai moduliException: sottoclasse di Throwable rappresenta eccezioniche dovrebbero essere gestite in qualche modo

Page 30: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Eccezioni di tipo Error

ErrorCondizioni anomale difficilmente gestibili da un moduloPrincipali sottoclassi di Error:

ThreadDeathLinkageErrorVirtualMachineError

Queste eccezioni possono essere ignorateQuando si verificano il metodo termina segnalando ilcodice di errore relativo

Page 31: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Eccezioni di tipo Exception

ExceptionDue categorie:

1 Eccezioni non controllate dal compilatoreSottotipo RunTimeExceptionIl compilatore non forza la loro gestioneEsempi: indice fuori dai limiti di un array statico,riferimento nullo a oggetto, divisione per 0, etc.Sottotipi di RunTimeException rappresentano questi casi,e.g. NullPointerException

2 Eccezioni controllate dal compilatoreTutti gli altri sottotipi di ExceptionIl compilatore forza la loro gestioneIl compilatore restitusce un errore di compilazione sel’eccezione viene ignorataEsempio: ClenteStudenteBase.java (leggiStudenteFile(...))

Page 32: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Utilizzo Eccezioni

Modalità di utilizzo1 Generare Eccezioni

Riconoscere una situazione di errore e lanciare unaeccezione.

2 Gestire EccezioniIntercettare una eccezione ed eseguire codice specifico pergestirle

3 Possibilità di gestionedelegare la gestione ad un altro modulointercettare (e gestire) eccezioni di uno o più tipiintercettare una eccezione e generarne un’altraeseguire una parte di codice indipendentemente dallaeccezione

Page 33: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Generare Eccezioni

GenerazioneDue categorie:

1 Dopo aver individuato una condizione anomala un metodopuò decidere di generare una eccezione per far gestire lasituazione ad altri moduli.

2 Generazione eccezioni in Java:Nella definizione del metodo dichiarare che può generareeccezioni

parola chiave throws nella definizione del metodoNel corpo del metodo

Istanziare un oggetto di tipo Exception appropriatoSollevare l’eccezione creata mediante l’istruzione throw.

Page 34: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esempio Generazione

Example (Esempio generazione eccezione)

public class MassimoGenerale {public static void main(String[] args)throws IllegalArgumentException {...if (trovato){System.out.println("Massimo trovato "+max);

}else {IllegalArgumentException e = newIllegalArgumentException("Nessun elemento inserito");

throw e;}

}}

Page 35: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Generazione Eccezioni

NoteNullPointerException è un sottotipo di RunTimeExceptionquindi può non essere controllatathrows accetta una lista di tipi di eccezioni: e.g. throwsNullPointerException, IOException, ...L’esecuzione dell’istruzione throw causa l’interruzione delmetodo, il controllo passa al metodo chiamante

Page 36: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire Eccezioni

Intercettare eccezioniSe invochiamo un metodo che genera eccezioni controllate(e.g. non sottotipi di Error o RunTimeException)dobbiamo necessariamente gestire le eccezioni che possonoessere generate2 possibilità

Si dichiara che il metodo possa a sua volta sollevareeccezioni: delegaSi inserisce il codice necessario per risolvere l’eccezione

Page 37: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Delega

Delegare la gestione delle eccezionipublic static Studente leggiStudente(String file){

FileReader f = new FileReader(file);BufferedReader in = new BufferedReader(f);

...}

Questo codice non compila: Errore: “Unhandled exception typeFileNotFoundException”

public static Studente leggiStudente(String file)throws FileNotFoundException{

FileReader f = new FileReader(file);BufferedReader in = new BufferedReader(f);

...}

Page 38: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Delega

Catena di delegaSe l’eccezione delegata si verifica, il metodo termina ed ilcontrollo passa al metodo chiamante segnalandol’eccezioneSe anche il metodo chiamante delega la gestione di questotipo di eccezioni si passa al successivo metodo chiamanteLa catena si interrompe quando:

uno dei metodi chiamanti intercetta e gestisce quel tipo dieccezionilo stack delle chiamate termina: la JVM terminal’esecuzione del programma segnalando un errore.

Per delegare più eccezioni che appartengono alla stessasuperclasse basta delegare la superclasse:

Per delegare: FileNotFoundException, IOException bastascrivere throws IOException

Page 39: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni

Gestione direttaLe istruzioni per gestire le eccezioni sono:

try ... racchiude le istruzioni che possono generare leeccezioni che si vuole gestirecatch ... racchiude il codice da eseguire quando leeccezioni si verificanofinally ... racchiude codice che deve essere eseguito in ognicaso: sia se si è verificata un eccezione sia se non se ne èverificata nessuna.

Page 40: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni: Esempio

Example (Gestione diretta)

public static Studente leggiStudente2(String file){//tolto throwsFileReader f = null;try {//codice che può lanciare una o più eccezionif = new FileReader(file);

} catch (FileNotFoundException e) {//codice che gestisce l’eccezione ditipo FileNotFoundExceptionSystem.out.println("Il file" + file + "non è stato trovato");

}...

}

Page 41: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni: note

Gestione diretta: noteil blocco try viene eseguito normalmentese si verifica un eccezione nel blocco try

si interrompe l’esecuzionese esiste un blocco catch corrispondente si eseguono leistruzioni nel blocco catch e poi si prosegue con il codicedopo il blocco catch.se non esiste un blocco catch (eccezioni Error oRunTimeException) si interrompe il metodo e si passa alchiamante

se non si verifica un eccezione nel blocco try il blocco catchnon viene eseguito, si prosegue con il codice seguente.

Page 42: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire più di un eccezione: Esempio

Example (Gestione diretta: più eccezioni)

public static Studente leggiStudente3(String file){//tolto throwsFileReader f = null;BufferedReader in = null;String s = null;try {//codice che può lanciare una o più istruzionif = new FileReader(file);in = new BufferedReader(f);s = in.readLine();

} catch (FileNotFoundException e1) {//codice che gestisce l’eccezione FileNotFoundExceptionSystem.out.println(file + " non trovato");

} catch (IOException e2) {//codice che gestisce l’eccezione IOExceptionSystem.out.println("Problema nella lettura da file");

}...}

Page 43: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni: note

Gestione diretta: noteViene eseguito il blocco catch corrispondente al tipo dieccezione intercettataLe eccezioni gestite debbono essere di tipi differenti,altrimenti il compilatore restituisce un errore (Unreachablecatch block ...)I catch vengono valutati in sequenza quindi le sottoclassidebbono stare più in alto delle superclassi:

nell’esempio precedenteIl blocco IOException non può stare prima diFileNotFoundException

Page 44: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni

NoteGestire un’eccezione vuol dire fare delle operazioniparticolari se l’eccezione si verifica o cambiare il flusso delcodice in presenza dell’eccezioneIl semplice catch dell’istruzione può modificare il flusso diesecuzioneEsempio: metodo esempioGestione in Test.java

Page 45: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Gestire le eccezioni: finally

Gestione diretta: il blocco finallyUtile per eseguire istruzioni a prescindere dalle eccezioniTipicamente usato per rilasciare risorse (e.g., chiudere unfile)Esempio: metodo esempioFinally in Test.java

Page 46: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esercizi I

Esercizi IRealizzare il metodo calcolaMedia() della classe Test.java.Il metodo deve leggere 3 interi da input, mediante un ciclowhile che termina quando l’utente inserisce un dato nonintero. Se l’utente inserisce esattamente 3 interi il metododeve calcolarne la media. Altrimenti il metodo devegenerare una IllegalArgumentExceptionRealizzare il metodo confrontaMedia() della classeTest.java, per calcolare due medie. Il metodo utilizzacalcolaMedia(), per calcolare due medie e stampa la mediapiù alta. Il metodo deve gestire le eccezioni sollevate dacalcolaMedia().

Page 47: Javadoc ed Eccezioni - Laboratorio di …profs.sci.univr.it/.../algBio/slides/javadocEccezioni.pdfEccezioni Letturae Scritturasu file Commentare ilcodice: Javadoc Eccezioni Esempio

Javadoc edEccezioni

Lettura eScrittura sufile

Commentareil codice:Javadoc

Eccezioni

Esercizi II

Esercizi IIRealizzare il metodo calcolaMediaFile(String file) dellaclasse Test.java. Il metodo opera come calcola media malegge i dati da file. Il metodo deve delegare la gestione ditutte le eccezioni.Realizzare il metodo confrontaMediaFile(String file1,String file2) della classe Test.java. Il metodo utilizzacalcolaMediaFile(), per calcolare due medie e stampa lamedia più alta. Il metodo deve gestire le eccezioni solevateda calcolaMediaFile()Nota: per eseguire il della classe Test.java scaricare iseguenti file txt:

media1.txtmedia2.txtinput.txt