Creare Eccezioni in Java

di il
5 risposte

Creare Eccezioni in Java

Ciao a tutti, sto seguendo un corso di java e in merito all'argomento eccezioni, posso creare una mia eccezione personalizzata estendola da Exception stampando un messaggio a video?

esempio avevo creato una banale eccezione di prova:

public class MiaEccezione extends Exception{

System.out.println("E'stata lanciata la mia eccezione");
}


poi ho creato un classe col main in modo da utilizzarla:

class bug{

public static void main(String[] args) throws MiaEccezione
{
int a=1001;

if (a<=1000)
System.out.println(a);
else
throw new MiaEccezione();
}
}


Solo che quando compilo mi da 3 errori dovuti al System.out che ho inserito nella eccezione, se lo tolgo e lascia il corpo della MiaEccezione vuoto funziona correttamente. cosa ho sbagliato?
[/b]

5 Risposte

  • Re: Creare Eccezioni in Java

    Ciao,

    Non dovresti andare a scrivere su System... l'eccezione conterrà una String e potrà ridefinire una serie di costruttori tra cui quello senza argomenti e quello con un argomento Stringa (che può essere ad esempio prefisso al risultato o costituirlo del tutto).
    Normalmente viene ridefinito anche il metodo getError che ottiene la stringa e/o il metodo toString che ottiene nuovamente la stringa.

    Sta a colui che effettua il catch dell'eccezione stampare a video il risultato con una System.out.println(e) o System.out.println(e.getError()). La tua eccezione dovrebbe solo impostare una stringa e poterla restituire a chi la richiede (con la getError o la toString appunto).

    Il fatto che stia al catcher la stampa a video ha tutta una serie di buoni motivi, primo tra tutti il fatto che uno potrebbe anche volerla ignorare (non è detto che un'eccezione impedisca il corretto funzionamento del resto, potrebbe rappresentare anche solo una warning, o scatenare un caso di default).

    Per un esempio semplicissimo di eccezione custom:

    Ciaociao
  • Re: Creare Eccezioni in Java

    Grazie mille, ora ho capito il problema. quindi mi basta definire il costruttore(o più costruttori) all'interno della classe eccezione creata, e in base agli argomenti con cui lancio l'eccezione:

    throw new MiaEccezione(eventuali parametri)

    Avrò degli output diversi?
  • Re: Creare Eccezioni in Java

    Ciao,

    Si... il costruttore con parametro stringa può servire proprio a diversificare... l'eccezione in sé non emette output.

    E' il catch che ha il compito di scrivere a video o effettuare altre operazioni:

    //Se hai ridefinito la toString:
    try{...codice...} catch(MiaEccezione e){ System.out.println(e);}
    //Se non l'hai ridefinita ma hai il metodo getError:
    try{...codice...} catch(MiaEccezione e){ System.out.println(e.getError());}

    Ciaociao
  • Re: Creare Eccezioni in Java

    Ottimo, grazie mille per l'aiuto!
  • Re: Creare Eccezioni in Java

    Le eccezioni in java sono in sostanza delle classi un po speciali. Devono estendere la classe Throwable in modo tale da poter essere poi usate con la parola riservata throw (vedere la relativa java doc).
    Pertanto, come in tutte le classi, solo le dichiarazioni di tipi e la creazione di oggetti possono avvenire, mentre per la chiamata di un metodo (quindi per eseguire delle operazioni) è necessario un blocco di codice, non necessariamente all'interno di un metodo.
    Nel caso dell'eccezione, se vuoi stampare un messaggio dovresti scrilerla così:


    import java.io.PrintStream;

    public class MyException extends Exception {

    System s;
    PrintStream ps = s.out;
    {
    ps.print("Exccezione");
    }

    /**
    * Creates a new instance of <code>MyException</code> without detail message.
    */
    public MyException() {
    }


    /**
    * Constructs an instance of <code>MyException</code> with the specified detail message.
    * @param msg the detail message.
    */
    public MyException(String msg) {
    super(msg);
    }
    }


    ---------------------------------------------

    In questo modo il messaggio verrà stampato.
    Naturalmente, come dice bottomap, non è una pratica da utilizzare.

    Ciao.
Devi accedere o registrarti per scrivere nel forum
5 risposte