Proseguire esecuzione dopo un'eccezione

di il
4 risposte

Proseguire esecuzione dopo un'eccezione

Ciao a tutti, nonostante abbia letto un po di volte il libro e altre guide non capisco ancora benissimo
come posso fare per far proseguire l'esecuzione di un mio programma, dopo che si è verificata un'eccezione.

Per esempio se io ho un metodo add(Integer e) che inserisce il parametro e all'interno di un vector, a condizione che e non sia uguale a null (in tal caso solleva una InvalidArgument):

il mio problema è capire dove mettere il blocco try-cach (nel main o nel metodo) e cosa scrivere dentro al blocco.

Grazie a tutti in anticipo!

4 Risposte

  • Re: Proseguire esecuzione dopo un'eccezione

    riccac ha scritto:


    Per esempio se io ho un metodo add(Integer e) che inserisce il parametro e all'interno di un vector, a condizione che e non sia uguale a null (in tal caso solleva una InvalidArgument):
    Se/dove gestire una eccezione del genere, dipende dal concetto di chi/perché ha causato la invocazione del add con un null!

    Se è dovuto ad una tua logica che hai sbagliato ... allora è un tuo baco. Chiaramente sarà poi da correggere ma ai fini della gestione della eccezione puoi farla a monte (anche molto più a monte e in modo più generico, es. Exception) magari loggando il problema da qualche (console e/o file).

    Se è dovuto ad un input dell'utente, potresti certamente catturare l'eccezione dove invochi add o comunque dove hai nozione della interazione con l'utente, in modo da segnalarlo visivamente. Ma sarebbe meglio testare prima l'errore di inserimento dell'utente, in modo che null NON arrivi ad add. E che se proprio dovesse arrivare null ad add ... allora sarebbe di nuovo un tuo baco.
  • Re: Proseguire esecuzione dopo un'eccezione

    Ciao,
    potresti anche semplicemente:
    
    public int add(Integer e)
        {
            if (e==null)
                return -1;
            else
            {
    
                return 1;
            }
        }
    
    in questo metodo e è definito integer, accetta i null e lo controlli...

    altrimenti
    
    public int add2(int e)
        {
            try
            {
                
            }
            catch(IllegalArgumentException ex)
            {
                return -1;
            }    
            catch(Exception ex)
            {
                return -2;
            }
            return 1;
        }
    
    qua l input è definito come int tipoprimitivo per cui nn accetterà mai un null...cmq i ho inserito un esempio di eccezzione per argomento nn consentito..
  • Re: Proseguire esecuzione dopo un'eccezione

    E' complicato!
    Non esiste una soluzione unica (sarebbe troppo facile) ma dipende in modo fondamentale dal tipo di eccezione e dall'oggetto che la ha generata.

    Non solo, ma la cosa e' pure peggio di cosi':
    1) i try/catch non devono essere messi a casaccio o indiscriminatamente, perche' sono molto pesanti dal punto di vista computazionale.
    2) bisogna intercettare le eccezzioni solo dove possono essere prese delle opportune contromisure

    Ad esempio: mentre scrivi su file la tabella dei valori della funzione acos, potresti ricevere l'eccezione InvalidArgumentException, se tenti di calcolare l'arco-coseno di 1.000000001, e l'eccezione IOException, se tenti di scrivere ma il disco e' pieno!

    E' evidente che le due eccezzioni devono essere trattate in posti diversi!


    Una buona strategia e' la seguente:
    1) intercettare SOLO le eccezzioni di interesse nel punto in cui possono essere gestite
    2) nel main dell'applicazione intercettare TUTTE le eccezioni, fare un log ed uscire.

    Cosa FONDAMENTALE, come ha detto @andbin, devi distinguere tra eccezioni generate perche' ha hai sbagliato TU nella scrittura del codice (vuoi sommare un intero ma stai usando Null), e eccezioni lecite (il disco e' pieno).

    Come distinguere? TANTA PRATICA, esperienza, ....

    E' come quando si scriveva un tema di Italiano: non si possono semplicemente scrivere delle parole a casaccio, anche se seguono perfettamente la grammatica!

    soggetto, verbo, complemento oggetto

    la piccione estrude calvo
  • Re: Proseguire esecuzione dopo un'eccezione

    Ok bene o male ho capito un po....devo solamente fare prove in continuazione e poi, con la pratica, imparerò meglio a distinguere i diversi casi e a comportarmi di conseguenza!
    Grazie a tutti!
Devi accedere o registrarti per scrivere nel forum
4 risposte