Gestione delle eccezioni

di il
4 risposte

Gestione delle eccezioni

Salve ragazzi sto cercando di usare correttamente l'uso delle eccezioni ma ho un problema, il mio programma in sostanza prende 2 numeri prova a dividerli se il denominatore è 0 cattura l'eccezioni e la fa stampare ad una classe questo è il sorgente:



		try
		{
		divisione div = new divisione();
	double 	res = div.dividi(numeratore,denumeratore);
		System.out.print(res);

		}
		
		catch(DivisionePerZeroException exception)// qui si lamenta il compilatore dicendo che questa classe non è raggiungibile
		{
			 exception.metodo(exception);
		}



	
e questa è la classe che si "gestisce l'eccezione:


public class DivisionePerZeroException extends Exception {

	


	public void  metodo(DivisionePerZeroException exception)
	{
		System.out.println(""+exception);
	}

	

}


graziee

4 Risposte

  • Re: Gestione delle eccezioni

    Molto probabilmente non hai definito il fatto che il metodo "dividi" della classe "divisione" può lanciare quell'eccezione. E se non glielo dici tu, il compilatore non sa dove (né perché) può essere lanciata un'eccezione di quel tipo.

    E poi un'altra cosa:
    public void  metodo(DivisionePerZeroException exception)
    {
       System.out.println(""+exception);
    }
    Quel metodo è interno alla classe DivisionePerZeroException e quello che vuoi stampare è l'oggetto stesso su cui invochi il metodo, quindi è equivalente a:
    
    public void metodo()
    {
       System.out.println(this.toString());
    }
    
  • Re: Gestione delle eccezioni

    Umm e come specifico al compilatore che il metodo dividi può lanciare l'eccezione??
  • Re: Gestione delle eccezioni

    Lo devi fare nel momento in cui dichiari come è fatto un metodo:
    
    public double dividi(...) throws DivisionePerZeroException{
       ....
    }
    
    In questo modo dici che il tuo metodo può lanciare un'eccezione..ma questo non basta perché devi anche dire quando sarà lanciata, nello specifico quando il denominatore sarà zero:
    public double dividi(double numeratore, double denominatore) throws ... {
       if (denominatore == 0) {
          throw new DivisionePerZeroException();
       }
       ...
    }
    Ricorda che dal momento in cui lanci un'eccezione allora immediatamente termina l'esecuzione "normale" e si salta direttamente al corpo del "catch".
    Quindi ad esempio se hai:
    public double dividi(double numeratore, double denominatore) throws ... {
       if (denominatore == 0) {
          throw new DivisionePerZeroException();
          System.err.println("Errore, divisione per zero");
       }
       ...
    }
    allora quella System.err.println non verrà mai eseguita! (immagino che te lo dica anche il compilatore comunque)
  • Re: Gestione delle eccezioni

    Grazie sei stato molto più chiaro tu che le slide del mio prof
Devi accedere o registrarti per scrivere nel forum
4 risposte