Visualizzazione dei risultati da 1 a 10 su 12

Discussione: gestione eccezioni

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da newutente Visualizza il messaggio
    - le eccezioni vanno gestite dove vengono invocati i metodi e vanno sollevate nel metodo stesso (secondo esempio fatto prima).
    Non necessariamente. Dipende sempre da ciò che si può/vuole fare e dal tipo di eccezione.
    Le eccezioni unchecked possono essere gestite oppure no. A discrezione del programmatore
    Le eccezioni checked devono essere gestite in qualche modo: o si gestiscono con un try/catch o si demanda la gestione al chiamante con un throws sulla firma del metodo.
    La seconda parte di questa frase ha poco senso: tutte le eccezioni vengono sollevate nel punto in cui c'è un throw (che sia codice del programmatore o della JVM).


    - quando si crea un oggetto l'eccezione va gestita (blocco try-catch) nel costruttore
    Non necessariamente. Anche qui, sta al programmatore decidere se nel costruttore di un oggetto il contesto è sufficientemente chiaro da poter gestire eventuali eccezioni oppure no. Anche i costruttori, come i metodi, possono sollevare eccezioni e, nel caso di eccezioni checked, le dichiarano con la clausola throws.


    - la parola throws sta ad indicare che in quel metodo sarà lanciata (throw) una eccezione ma sarà gestita (blocco try-catch) altrove (nel metodo che chiama il metodo in questione - es. nel main)
    Ni. La clausola throws significa che quel metodo può sollevare quel tipo di eccezioni (le eccezioni, lo dice il nome, sono qualcosa di "eccezionale", non la regola). Chi usa quel metodo deve (nel caso di eccezioni checked) provvedere al trattamento: con try/catch o con altro throws.


    - SOLO nel caso di eccezioni unchecked (tutto le sottoclassi di RuntimeException) si può tranquillamente lanciare (throw) l'eccezione ma senza la necessità di gestirla (blocco try-catch) quindi non serve mettere throws.
    Volendo il programmatore può decidere comunque di gestire l'eccezione e lo può fare liberamente nel metodo stesso, quindi con blocco try-catch, oppure indicando throws e inserendo il blocco try-catch altrove (nel metodo che chiama il metodo in questione - es. nel main).
    Sì.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Non necessariamente. Anche qui, sta al programmatore decidere se nel costruttore di un oggetto il contesto è sufficientemente chiaro da poter gestire eventuali eccezioni oppure no. Anche i costruttori, come i metodi, possono sollevare eccezioni e, nel caso di eccezioni checked, le dichiarano con la clausola throws.
    in realtà con il costruttore bisognerebbe fare attenzione e vedere se non è possibile fare in altro modo.
    Intanto l'oggetto non è correttamente inizializzato, che fai continui? vai in eccezione? L'oggetto è pronto per essere finalizzato, ma quando interviene il gc?

    Dal punto di vista della sicurezza, queste possono essere anche back door (è sicuramente pronto per il gc, implementi finalize e fai quello che ti pare).

    In generale quindi per le eccezioni dal costruttore chiediti se è davvero necessario averle (e in caso prendi opportuni provvedimenti per garantire integrità e sicurezza)
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.