Visualizzazione dei risultati da 1 a 8 su 8

Discussione: [JAVA] Eccezioni

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    46

    [JAVA] Eccezioni

    Ciao, volevo sapere qual'è la differenza tra questo pezzo di codice

    codice:
    public Object next ()throws NoSuchElementException
    { if (!hasNext()) throw new NoSuchElementException();
          return v[posizione++];
        }
    e questo
    codice:
    public Object next ()
    { if (!hasNext()) throw new NoSuchElementException();
          return v[posizione++];

    Qualcuno sa aiutarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    46
    Riformulo la domanda,magari non si è capito il mio dubbio...

    in certi metodi, prima del corpo, si dichiara: throws Eccezione, e nel corpo viene lanciata(credo) con throw....

    in altri prima del corpo non si dichiara niente ma nel corpo viene lanciata l'eccezione con throw....che differenza c'è?

    che differenza c'è fra throws w throw?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... la differenza fra i due pezzi di codice è che il primo è corretto, mentre il secondo no.

    A parte questo: la clausola throws serve ad indicare che il metodo in questione può lanciare eccezioni dei tipi specificati. Un metodo che non dichiara di lanciare eccezioni è un metodo che prevede dei meccanismi per cui qualsiasi eccezione viene catturata e elaborata al suo interno.

    Un metodo che dichiara di poter lanciare delle eccezioni, invece, serve ad avvertire chi lo utilizza che sarà lui a dovrsi prendere carico di questa eventualità.


    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

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    46
    quindi io throws devo metterlo sempre o nell'interfaccia o nella classe che la implementa se poi all'interno del metodo devo usare il throw?

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Originariamente inviato da LeleFT
    Beh... la differenza fra i due pezzi di codice è che il primo è corretto, mentre il secondo no.

    A parte questo: la clausola throws serve ad indicare che il metodo in questione può lanciare eccezioni dei tipi specificati. Un metodo che non dichiara di lanciare eccezioni è un metodo che prevede dei meccanismi per cui qualsiasi eccezione viene catturata e elaborata al suo interno.

    In realtà entrambe le forme sono corrette perchè NoSuchElementException estende RuntimeException ed il vincolo "catch or declare" vale slo per le eccezioni che non sono sottoclassi di RuntimeException.

    RuntimeException is the superclass of those exceptions that can be thrown during the normal operation of the Java Virtual Machine.

    A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.
    Ad esempio la NullPointerException può scattare ogni volta che invochi un metodo se un oggetto, se il riferimento è nullo, ma sarebbe insensato racchiudere tutte le ivocazioni di metodi dentro un try/catch. Perchè non è necessario catturare esplicitamente le RuntimeException? Perchè spesso rappresentano errori di programmazione evitabili dal programmatore stesso, e non ha senso recuperare la situazione in tale circostanza, se non per mandare un messaggio di log in cui si dice che il programma sta per andare in crash per un bug. Ad esempio un programmatore può sempre far in modo di non invocare metodi su oggetti nulli; cosi come nel tuo esempio può controllare con hasNext se un altro elemento esiste prima di invocare next.

    Ci sono alcune RuntimeException che non rappresentano necessariamente errori di programmazione, ad esempio la NumberFormatException che scatta se si cerca di interpretare una stringa come un numero e dovrebbe sempre essere catturata esplicitamente, visto che l'errore può essere causato dall'utente che ha inserito una stringa non valida e non dal programmatore.

    In generale è comuqnue buona norma inserire nella segnatura di un metodo anche le eccezioni RuntimeException che possono essere lanciate, anche se non è obbligatorio.

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  6. #6

    Re: [JAVA] Eccezioni

    codice:
    public Object next ()throws NoSuchElementException
    { if (!hasNext()) throw new NoSuchElementException();
          return v[posizione++];
        }
    codice:
    public Object next ()
    { if (!hasNext()) throw new NoSuchElementException();
          return v[posizione++];
    Sono entrambi giusti perchè NoSuchElementException della classe Iterator è una eccezione unchecked(estende da RuntimeException) e quindi non ha bisogno di essere elencata nell'header del metodo.
    Infatti nel caso tu non la gestisca nel metodo(come fai infatti) essa viene propagata al chiamante che dovrà racchiudere l'istruzione di chiamata in un blocco try-catch oppure propagarla acnh'esso al suo chiamante(se ne ha uno).
    Se invece era una eccezione checked(ovvero che non estende da RuntimeException) il compilatore ti avrebbe dato errore.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    In effetti non mi sono andato a guardare nello specifico di che eccezione di trattasse... ho solo guardato alla firma dei metodi e a ciò che fanno...


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    46
    Grazie a tutti...ora mi è un pò + chiaro!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.