Clausola throws

di il
2 risposte

Clausola throws

Buona domenica a tutti, volevo proporre questo semplice programmino:
public class Tempo {
    protected int ore, minuti, secondi;
    static public char separatore = ':';

    public Tempo () {   // costruttore
        ore = minuti = secondi = 0;
    }
    public Tempo (int ora, int minuto, int secondo) {
	// costruttore
        this();
        assegnaTempo (ora, minuto, secondo);
    }
    public int assegnaTempo (int ora,
    int minuto, int secondo) {
        if (ora >= 0 && ora < 24 && minuto >= 0 &&
        minuto < 60 && secondo >= 0 && secondo < 60 ) {
            ore = ora;
            minuti = minuto;
            secondi = secondo;
            return 0;
        } else
        return -1;
    }
    public int leggiOra () {
        return ore;
    }
    public int leggiMinuti () {
        return minuti;
    }
    public int leggiSecondi () {
        return secondi;
    }
    public void aggiungiOre (int numOre) {
        ore = ore + numOre;
        while (ore > 23)
        ore = ore - 24;
    }
    public void visualizza (boolean ritornoACapo) {
        System.out.print(""+ ore + separatore
        + minuti + separatore+secondi+separatore);
    }
}
public class TempoConEccezioni extends Tempo {
    public TempoConEccezioni() {
        super();
    }
    public TempoConEccezioni (int ora, int minuto, int secondo) {
        super (ora, minuto, secondo);
    }
    public int assegnaTempo (int ora, int minuto, int secondo) throws TempoExceptio {
        if (super.assegnaTempo(ora,minuto,secondo) == 0)
        return 0;
        else throw new TempoException("Errore in assegnatempo");
    }
}
public class TempoException extends RuntimeException {
    public TempoException() {
        super();
    }
    public TempoException(String msg) {
        super(msg);
    }
}
public class UsaTempoConEccezioni{
    public static void main(String [] args) {  
      try  { 
         Tempo t = new TempoConEccezioni (99,99,99); 
           t.visualizza(true); 
        } catch (TempoException e) { 
              System.out.println ("Errore:" + e); 
        } 
   } 
}
Se tolgo la clausola throws TempoException nel metodo "assegnaTempo" della classe "TempoConEccezioni", il programma funziona lo stesso; no dovrebbe invece dare un errore di compilazione?

2 Risposte

  • Re: Clausola throws

    Friz02 ha scritto:


    Se tolgo la clausola throws TempoException nel metodo "assegnaTempo" della classe "TempoConEccezioni", il programma funziona lo stesso; no dovrebbe invece dare un errore di compilazione?
    No, perché TempoException estende RuntimeException, quindi è una eccezione "unchecked" (non controllata). Non controllata proprio nel senso che il compilatore non controlla che venga considerata in qualche modo dal programmatore (catturata o dichiarata nel chiamante).

    E comunque non ha molto senso fare una classe che non usa eccezioni e poi dire: ma sì dai, facciamo una sottoclasse che le usa.
    Anche perché così facendo non potresti mai nella sottoclasse fare un "override" di un metodo e aggiungergli il throws di una eccezione "checked".
  • Re: Clausola throws

    Grazie andbin
Devi accedere o registrarti per scrivere nel forum
2 risposte