Errore: catch without try

di il
4 risposte

Errore: catch without try

Ciao a tutti,
eccomi a voi con un nuovo problema. Già e chi non ne ha?
Uno dei metodi che ho scritto deve riuscire a gestire sia la StringIndexOutOfBoundsException, sia la NullPointerException.
Ho provato con un sono blocco try - catch ad implementare una multi catch, ma l'IDE NetBeans mi sottolinea la riga in rosso, suggerendomi l'errore che riporto in oggetto.
Il codice è tipo il seguente:

public static MioMetodo() throws StringIndexOutOfBoundsException, NullPointerException
	{

		// istruzioni varie

	try
		 {
		// altre istruzioni
		}
		catch (StringIndexOutOfBoundsException SIEx) {};
		catch (NullPointerException NPEx) {};
	}
Qualcuno è così gentile da dirmi dove sbaglio?

Ciao e Grazie in anticipo
Fulvio

4 Risposte

  • Re: Errore: catch without try

    I punti e virgola alla fine del catch????
    dai un'occhiata alla sintassi giusta.

    inoltre nel metodo non hai indicato il tipo di ritorno!
  • Re: Errore: catch without try

    fulviot66 ha scritto:


    Ho provato con un sono blocco try - catch ad implementare una multi catch, ma l'IDE NetBeans mi sottolinea la riga in rosso
    Il multi-catch è da Java 7 in poi. Se stai compilando con JDK inferiore o con uno superiore ma target inferiore a Java 7 ... ovviamente non è usabile.

    fulviot66 ha scritto:


    
    	try
    		 {
    		// altre istruzioni
    		}
    		catch (StringIndexOutOfBoundsException SIEx) {};
    		catch (NullPointerException NPEx) {};
    	}
    
    I ";" NON ci vanno.

    Più catch si scrivono così:
    try {
        // ....
    } catch (NullPointerException e) {
        // ....
    } catch (StringIndexOutOfBoundsException e) {
        // ....
    }
  • Re: Errore: catch without try

    Permettetemi di aggiungere una cosa
    public static MioMetodo() throws StringIndexOutOfBoundsException, NullPointerException
    è un errore a livello concettuale.

    StringIndexOutOfBoundException e NullPointerException sono due eccezioni eredi di RuntimeException e in quanto tali sono definite "unchecked", per cui non dovrebbero essere inserite nella clausola throws.

    MioMetodo() dovrebbe fare di tutto per non sollevare queste eccezioni, e se le solleva c'è qualcosa che non va.

    Ci sono dei casi in cui un metodo potrebbe sollevare delle eccezioni unchecked ma solo in risposta a dei dati in input che arrivano a runtime. In questo caso è responsabilità del chiamante fare in modo che il metodo non sollevi l'eccezione.
    Ad esempio
    public static int lunghezza(String s) {
        return s.length();
    }
    Questo metodo solleva NullPointerException se la stringa passata come parametro è null.
    In questo caso ci sono due strade da poter seguire:

    1) Documenti il metodo informando l'utente che il metodo potrebbe sollevare una NullPointerException, così:
    /**Restituisce il numero di caratteri di cui è composta la stringa specificata dal parametro.
      *Lancia l'eccezione NullPointerException se la stringa è null*/
    public static int lunghezza(String s) {...}
    2)Gestisci i casi anomali e sollevi un'altro tipo di eccezione:
    public static int lunghezza(String s) {
        if(s==null) throw new IllegalArgumentException("La stringa passata in ingresso non deve essere null");
        //IllegalArgumentException è un'altra eccezione unchecked
        return s.length();
    }
    Inoltre le eccezioni unchecked, laddove possibile, non dovrebbero essere gestite nel blocco catch ma dovrebbero essere usati dei semplici controlli (prevenire è meglio che curare).
    Nell'ultimo esempio che ho fatto, ho scritto
    if(s==null) //gestisco il caso che può portare alla NullPointerException
    che è molto meglio (leggibile, efficiente, performante) che scrivere
    try {
        return s.length();
    }
    catch(NullPointerException e) { throw new IllegalArgumentException();
  • Re: Errore: catch without try

    Grazie a Tutti di Cuore


    Fulvio
Devi accedere o registrarti per scrivere nel forum
4 risposte