Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Credevo mi fosse chiaro che Exception ed Error sono le due sottoclassi di Throwable
    Infatti sono le uniche sottoclassi dirette di Throwable.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Javac mi compila questo codice...

    Con che logica Java risale da Exception a Throwable e poi scende in Error a prendere quell'errore?
    Gli Error sono tecnicamente "unchecked", quindi NON c'è alcun obbligo di dichiararli né di catturarli/gestirli. Gli Error comunque sono concettualmente un po' diversi dalle altre eccezioni, nel senso che rappresentano errori "gravi" a cui tipicamente e difficilmente si può porre rimedio.

    Comunque AssertionError non ha nulla a che fare con Exception. AssertionError NON deriva da Exception .... deriva da Error che deriva da Throwable. Quindi NON è il tuo catch di Exception nel main che può catturare AssertionError.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Gli Error sono tecnicamente "unchecked", quindi NON c'è alcun obbligo di dichiararli né di catturarli/gestirli. Gli Error comunque sono concettualmente un po' diversi dalle altre eccezioni, nel senso che rappresentano errori "gravi" a cui tipicamente e difficilmente si può porre rimedio.

    Comunque AssertionError non ha nulla a che fare con Exception. AssertionError NON deriva da Exception .... deriva da Error che deriva da Throwable. Quindi NON è il tuo catch di Exception nel main che può catturare AssertionError.
    Questo è quanto risulta anche a me, per questo mi sembra tutto assurdo nel leggere certi codici e come vengono eseguiti.
    Non ho chiamato in ballo il catch perché lui si aspetta una Exception e non un Error, bensì l'esecuzione del blocco try che spassionatamente genera un errore che non è tra le sottoclassi di Exception.
    Secondo me doveva starci
    codice:
    public static void methodX() throws Error
    proprio perché se volessi prepararmi a lanciare un IOEXception, potrei scrivere
    codice:
    public static void methodX() throws Exception
    non
    codice:
    public static void methodX() throws Error
    Invoco cioè la classe precisa o una sua superclasse, non una superclasse "zia" di quella che poi vado a generare.

    Insomma l'Error in questo caso si presenta senza invito (sennò il throws che viene specificato a fare...). Com'è possibile?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    per questo mi sembra tutto assurdo nel leggere certi codici e come vengono eseguiti.
    Non c'è nulla di strano o assurdo ... basta conoscere le regole.


    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Non ho chiamato in ballo il catch perché lui si aspetta una Exception e non un Error, bensì l'esecuzione del blocco try che spassionatamente genera un errore che non è tra le sottoclassi di Exception.
    Un metodo può dichiarare una eccezione checked ma non lanciarla. Semplicemente perché lui non la lancia ma ... un override in una sottoclasse potrebbe invece.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Secondo me doveva starci
    codice:
    public static void methodX() throws Error
    Gli Error, lo ripeto, sono "unchecked". Non c'è alcun obbligo di dichiararli con il throws né di catturarli/gestirli in qualche modo. Quindi mettere throws Error per il compilatore non implica nulla. Al massimo è utile a livello documentativo, cioè nel javadoc che si può generare, verrebbe fuori ben evidente che il metodo dichiara Error. Insomma, serve più all'umano che al compilatore un throws del genere.
    Gli Error comunque, tipicamente, non si dichiarano (mai fatto personalmente).

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Insomma l'Error in questo caso si presenta senza invito (sennò il throws che viene specificato a fare...). Com'è possibile?
    Sono le eccezioni "checked" che vanno dichiarate. Queste vanno considerate dal compilatore e dal programmatore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Tag per questa discussione

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.