Visualizzazione dei risultati da 1 a 6 su 6

Hybrid View

  1. #1
    Lo so che gli Error sono unchecked, allora quel throws Exception serve solo a confondere!
    Togliendo throws Exception, noto che l'esecuzione è identica: Exception in thread "main" java.lang.AssertionError che sembra contraddittorio poiché AssertionError non appartiene alle Exception ma agli Error.

    Cioè per Java il throw di un errore qualsiasi è sempre una Exception perché sto controllando io l'evento throw new AssertionError()?
    Java cioè vede prima che il codice chiama qualcosa con un throw e per lui è una Exception, anche se dopo gli metto una classe creata da me che estende un qualunque Throwable?

    Per fare andare in porto l'esecuzione, devo scrivere:
    codice:
    public class Pag423 {	public static void methodX() { // tolto il throws Exception poiché inutile
    		throw new AssertionError();
    	}
    	public static void main(String[] args) {
    		try{
    			methodX();
    		}
    		catch(AssertionError ae) { // ora può gestire ciò che il throw ha generato
    			System.out.println("EXCEPTION");
    		}
    	}
    }
    Stavolta viene eseguito il catch perché ho da gestire l'errore che ho creato, sebbene la sua non gestione (quando il catch si aspetta una Exception) interrompe l'esecuzione avvisandomi in console di una Exception.

  2. #2
    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
    Lo so che gli Error sono unchecked, allora quel throws Exception serve solo a confondere!
    Se quello è un "quiz" o qualcosa del genere .... allora sì certo, è fatto per confondere!

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Togliendo throws Exception, noto che l'esecuzione è identica: Exception in thread "main" java.lang.AssertionError che sembra contraddittorio poiché AssertionError non appartiene alle Exception ma agli Error.
    Non capisco perché dovrebbe essere contraddittorio. Una eccezione tecnicamente "unchecked" può essere lanciata in qualunque punto senza dover anticipare/dichiarare alcunché, indipendentemente dalle eccezioni "checked" eventualmente dichiarate con throws.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Cioè per Java il throw di un errore qualsiasi è sempre una Exception perché sto controllando io l'evento throw new AssertionError()?
    throw lancia solo una eccezione. Può essere catturata già nel metodo (dove viene lanciata) oppure può uscire fuori dal metodo. Se è checked, per poter uscire fuori dal metodo DEVE essere dichiarata (esattamente quella eccezione oppure un supertipo).
    Tutto qui.

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Java cioè vede prima che il codice chiama qualcosa con un throw e per lui è una Exception, anche se dopo gli metto una classe creata da me che estende un qualunque Throwable?
    Forse devi ancora chiarirti le idee ....

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Per fare andare in porto l'esecuzione, devo scrivere:
    [....]
    Stavolta viene eseguito il catch perché ho da gestire l'errore che ho creato, sebbene la sua non gestione (quando il catch si aspetta una Exception) interrompe l'esecuzione avvisandomi in console di una Exception.
    Qui ovviamente ok, viene lanciato un AssertionError e più a monte c'è un catch proprio di AssertionError. Quindi è effettivamente catturata.
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.