Eccezioni già catturate

di il
11 risposte

Eccezioni già catturate


class MyExc1 extends Exception { }
class MyExc2 extends Exception { }
class MyExc3 extends MyExc2 { }
public class B1 {
public static void main(String [] argv)
throws Exception {
try {
System.out.print(1);
m();
System.out.print(2);
}
catch( MyExc3 d ) {
System.out.print(3);
}
}
static void m() throws Exception {
try {
if(true) throw( new MyExc1() );
else throw( new MyExc3() );
}
catch( MyExc3 c ) {
throw( new MyExc3() );
}
catch( MyExc1 j ) { ------------------------------- è già stato catturato
System.out.print(4);
throw( new MyExc3() );
}
catch( Exception z ) { ------------------------------è già stato catturato
System.out.print(5);
}
}
}
Giorno ragazzi, ho provato a svolgere il seguente esercizio. La soluzione è "errore a tempo di compilazione", infatti se lo scrivo sul compilatore mi segnala errori nei punti indicati solo che non capisco il motivo, pur guardando la gerarchia degli errori. Myexc come fa ad essere già stato catturato se non è sottoclasse di Myexc2 o Myexc3? Idem per Exception.

11 Risposte

  • Re: Eccezioni già catturate

    giulio0 ha scritto:


    Giorno ragazzi, ho provato a svolgere il seguente esercizio. La soluzione è "errore a tempo di compilazione", infatti se lo scrivo sul compilatore mi segnala errori nei punti indicati solo che non capisco il motivo, pur guardando la gerarchia degli errori. Myexc come fa ad essere già stato catturato se non è sottoclasse di Myexc2 o Myexc3? Idem per Exception.
    Il codice compila senza errori o warning.


    P.S. quando posti del codice, per cortesia postalo ben indentato/spaziato. Altrimenti si capisce poco/nulla ..
  • Re: Eccezioni già catturate

    Ricontrolla la versione di Java che stai usando per la compilazione.

    Non ci sono errori e il risultato e' esattamente quello che ti aspetteresti
    con Java 8, 11 e 12!
  • Re: Eccezioni già catturate

    Adesso ho riprovato e viene eseguito senza warning come dici tu (strano) però non stampa nulla, ed a te?
  • Re: Eccezioni già catturate

    giulio0 ha scritto:


    Adesso ho riprovato e viene eseguito senza warning come dici tu (strano) però non stampa nulla, ed a te?
    Deve stampare 143
    Il 1 è ovvio (prima cosa eseguita sempre). Il 4 perché m() lancia new MyExc1() che viene catturato dal catch(MyExc1 j) quindi stampa 4. Ma poi lancia new MyExc3() che deve per forza uscire dal metodo, che viene catturato nel main e quindi stampa 3.
  • Re: Eccezioni già catturate

    Per dare questo risultato significa che è entrato nell'if, mi potresti spiegare il perchè entra? Non capisco la condizione implicita dell'if
  • Re: Eccezioni già catturate

    giulio0 ha scritto:


    Per dare questo risultato significa che è entrato nell'if, mi potresti spiegare il perchè entra? Non capisco la condizione implicita dell'if
    if(true) è sempre "vero", quale è il dubbio?
  • Re: Eccezioni già catturate

    Un'eccezione quando è vera o falsa?
  • Re: Eccezioni già catturate

    giulio0 ha scritto:


    Un'eccezione quando è vera o falsa?
    Non vuol dire nulla detto così.
    if (true) { ...corpo... }
    vuol dire che quel blocco di codice viene sempre eseguito incondizionatamente. Poi cosa fai nel corpo (es. lanciare una eccezione) è un'altra cosa.
  • Re: Eccezioni già catturate

    Quindi in questo caso non sarà mai false? Non entrerà mai nell'else?
  • Re: Eccezioni già catturate

    giulio0 ha scritto:


    Quindi in questo caso non sarà mai false? Non entrerà mai nell'else?
    Sì non entrerà mai nel blocco else. E oltretutto, un IDE un po' "pignolo" (Eclipse lo fa) te lo dovrebbe pure segnalare come warning di "dead code" cioè codice che non verrà mai usato.
  • Re: Eccezioni già catturate

    Ok grazie gentilissimo, adesso va pure nel mio.
Devi accedere o registrarti per scrivere nel forum
11 risposte