Errore throws 2

di il
10 risposte

Errore throws 2

Ragazzi ho questo codice copiato per filo e per segno pero mi da un errore dentro il secondo try
public class MyException extends RuntimeException { }  
 
public class Test2 {
   public static void main (String [] args) {
       try {
             method1 ();
       }
       catch (MyException ne) {
              System.out.println("A");
       }
    }
    public static void method1 () {
        try {
             throws Math.random() > 0.5 ? new MyException() : new RuntimeException ();
        }
        catch (RuntimeException re) {
              System.out.println("B");
        }
    
    }
}
gli errori sono "illegal start of expression" e "not a statement" sul ?

10 Risposte

  • Re: Errore throws 2

    maracaibo25 ha scritto:


    gli errori sono "illegal start of expression" e "not a statement" sul ?
    Per lanciare una eccezione si usa throw ... non throws (throws dichiara le eccezioni a livello di metodo)

    Comunque quel codice non stamperà mai "A" perché il catch in method1() cattura sia MyException che RuntimeException e quindi non usciranno mai da method1().
  • Re: Errore throws 2

    andbin ha scritto:


    Per lanciare una eccezione si usa throw ... non throws (throws dichiara le eccezioni a livello di metodo)
    grazie, adesso l'ho ricompilato e mi dice "class MyException is public should be declared in a fine named MyException.java"
  • Re: Errore throws 2

    maracaibo25 ha scritto:


    mi dice "class MyException is public should be declared in a fine named MyException.java"
    Se hai messo tutto in un singolo sorgente sì, perché hai 2 tipi public.

    In un singolo sorgente puoi definire più tipi (classi, interfacce, ecc...) ma solo UNO al massimo può essere public. E se c'è tale tipo public, il nome del sorgente (estensione a parte) DEVE corrispondere al nome di questo tipo.
  • Re: Errore throws 2

    andbin ha scritto:


    Se hai messo tutto in un singolo sorgente sì, perché hai 2 tipi public.

    In un singolo sorgente puoi definire più tipi (classi, interfacce, ecc...) ma solo UNO al massimo può essere public. E se c'è tale tipo public, il nome del sorgente (estensione a parte) DEVE corrispondere al nome di questo tipo.
    ok ho provato a togliere il public al "class MyException" e funziona,ma in caso volessi lasciare il codice cosi comè e compilarlo con i due public come faccio,cioè ce un modo per farlo o ci deve essere per forza un solo public nel sorgente?
  • Re: Errore throws 2

    maracaibo25 ha scritto:


    ma in caso volessi lasciare il codice cosi comè e compilarlo con i due public come faccio,cioè ce un modo per farlo o ci deve essere per forza un solo public nel sorgente?
    Se vuoi mantenere entrambi public, allora devi avere 2 file sorgente:

    MyException.java con dentro public class MyException ......
    Test2.java con dentro public class Test2 .......
  • Re: Errore throws 2

    andbin ha scritto:


    Se vuoi mantenere entrambi public, allora devi avere 2 file sorgente:

    MyException.java con dentro public class MyException ......
    Test2.java con dentro public class Test2 .......
    ok grazie andbin,adesso il risultato è B,secondo me esce questo risultato perche la compilazione in questo caso va a buon fine,quando viene eseguito il programma, il metodo "method 1" va a generare appunto l'eccezione in runtime che poi viene catturata e stamperà B,non so se sono stato chiaro,correggimi se sbaglio
  • Re: Errore throws 2

    maracaibo25 ha scritto:


    uando viene eseguito il programma, il metodo "method 1" va a generare appunto l'eccezione in runtime che poi viene catturata e stamperà B,non so se sono stato chiaro,correggimi se sbaglio
    Sì, l'avevo spiegato nella mia prima risposta ..
  • Re: Errore throws 2

    andbin ha scritto:


    Comunque quel codice non stamperà mai "A" perché il catch in method1() cattura sia MyException che RuntimeException e quindi non usciranno mai da method1().
    però scusami appunto perché viene catturata la MyException non va a fare poi la stampa di A ? Scusami se insisto
  • Re: Errore throws 2

    maracaibo25 ha scritto:


    però scusami appunto perché viene catturata la MyException non va a fare poi la stampa di A ? Scusami se insisto
    In method1() c'è un catch (RuntimeException re). Questo catch è in grado di catturare qualunque oggetto eccezione che è esattamente RuntimeException oppure un sottotipo di RuntimeException (sì, il catch di un tipo X considera ANCHE i sottotipi).

    Quindi quando nel try viene lanciato (uno dei due "a caso")

    throws Math.random() > 0.5 ? new MyException() : new RuntimeException ();

    RuntimeException viene catturato dal catch.
    MyException essendo una estensione di RuntimeException viene comunque catturato dal catch.

    Quindi nessuna delle due eccezioni esce da method1() pertanto viene sempre stampato "B".
  • Re: Errore throws 2

    andbin ha scritto:



    In method1() c'è un catch (RuntimeException re). Questo catch è in grado di catturare qualunque oggetto eccezione che è esattamente RuntimeException oppure un sottotipo di RuntimeException (sì, il catch di un tipo X considera ANCHE i sottotipi).

    Quindi quando nel try viene lanciato (uno dei due "a caso")

    throws Math.random() > 0.5 ? new MyException() : new RuntimeException ();

    RuntimeException viene catturato dal catch.
    MyException essendo una estensione di RuntimeException viene comunque catturato dal catch.

    Quindi nessuna delle due eccezioni esce da method1() pertanto viene sempre stampato "B".
    ok grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte