Eccezioni java: throw, throws, try, catch

Discussione in 'Java' iniziata da Androidino, 28 Marzo 2014.

  1. Androidino

    Androidino Utente Attivo

    Registrato:
    16 Gennaio 2014
    Messaggi:
    30
    Mi Piace Ricevuti:
    1
    Punteggio:
    0
    ciao a tutti,

    del corso di programmazione orientata agli oggetti ho capito tutto finora, tranne qualcosa riguardante le eccezioni, mi spiego meglio...

    Abbiamo visto che le classi di eccezioni possono appartenere a o ereditare da Exception o RuntimeException... le prime sono un po' più "pesanti" e richiedono controlli obbligatori, mentre per le seconde basterebbe un if, ma è qui che mi confondo: throw e throws quando e dove vanno messi? E il try catch, quando e dove? nei main solitamente, vero?

    Gradirei che qualcuno mi spiegasse per entrambi i tipi di eccezioni come e con che logica vanno sistemati throw, throws, try, catch, quando sono obbligatori, quando consigliati, etc.

    Grazie! :)
     
  2. Slyfer

    Slyfer Utente Attivo

    Registrato:
    4 Dicembre 2010
    Messaggi:
    65
    Mi Piace Ricevuti:
    21
    Punteggio:
    0
    Ciao, partiamo con le eccezioni.

    Le eccezioni si dividono in due categorie le checked e le unchecked (quelle che ereditano da runtime).

    Per le checked è obbligatorio mettere un try catch nel metodo o mettere il throws nella firma del metodo stesso; per le unchecked non devi fare nessun controllo.

    Esempi di checked exception sono la IOException e derivate (es FileNotFoundException) mentre per le unchecked sono la NullPointerException o l'ArrayIndexOutOfBoundException.

    Questa è la teoria, ora ti faccio un esempio per spiegarti come uso io i try catch etc...

    Tipicamente un'applicazione si deve dividere in layer; ora senza stare qua ad approfondire avrai sempre della classi (o metodi se fai tutto in una classe sola;) che contengono la business logic, che io tipicamente chiamo service.

    Nei service (anche se sono metodi) devi capire se è opportuno catchare l'eccezione o dichiararla nella firma.

    Es se ho un metodo che legge il contenuto di un file:

    Codice:
    public String readFile(String fileName)
    Il codice è del tipo:

    Codice:
    File f = new File(fileName);
    InputStream is = f.getInputStream();
    ....
    return fileContent;
    
    Questo codice lancia una FileNotFoundException quindi ho due scelte:

    - aggiungere alla throws list
    - gestire l'eccezione e ritornare null o stringa vuota

    Caso1

    Codice:
    public String readFile(String fileName) throws FileNotFoundException/CODE]
    
    Caso2 
    
    [CODE]
    try{
    File f = new File(fileName);
    InputStream is = f.getInputStream();
    ....
    return fileContent;
    } catch (FileNotFoundException e) {
    return null;
    }
    
    
    In linea generale dipende da che si deve fare, io come regola personale catcho le eccezioni sono se devo aggiungere info o personalizzarle usando eccezioni custom

    es
    Codice:
    public String readFile(String fileName) throws ServiceException
    try{
    File f = new File(fileName);
    InputStream is = f.getInputStream();
    ....
    return fileContent;
    } catch (FileNotFoundException e) {
    throw new ServiceException(e, "File Not Found");
    }
     
Sto caricando...

Condividi questa Pagina