Non ho ben capito quando, perchč usare, e a cosa sevono le asserzioni.
Perchč se gią posso gestire le eccezioni esistono le asserzioni? A cosa si riferiscono?
Perchč e quando usarle?
Servono per caso per dei controlli generici?
Non ho ben capito quando, perchč usare, e a cosa sevono le asserzioni.
Perchč se gią posso gestire le eccezioni esistono le asserzioni? A cosa si riferiscono?
Perchč e quando usarle?
Servono per caso per dei controlli generici?
Sono due cose un tantino differenti (almeno per me)
L'eccezione č un meccanismo di segnalazione e di eventuale recupero (quando possibile) dell'esecuzione.
Sono nate per gestire situazioni in cui l'anomalia, se correttamente gestita, non porta alla chiusura del programma.
Pensa di trovarti in un programma di una certa entitą e lavori con file. supponi di non trovare il file. Quella specifica funzione puņ non lavorare senza il file, ma l'itnero programma ha senso senza il file e puņ continuare. Quindi se gestisci l'eccezione ti limiti a comunicare l'assenza del file, ma non termini in malo modo il programma.
Un'asserzione invece č un test, un qualcosa che deve valere true o false. Aiutano a scoprire errori, in quanto il valore false indica un'anomalia nel programma in esecuzione.
E' in generale usata soprattutto per i test (junit ne fa pesante uso), poco in produzione.
Ricorda l'eccezione indica all'utente un'anomalia, l'asserzione documenta il programma (in genere al developer). In genere l'asserzione indica cose che dovrebbero essere note, ma in relazione al programmatore, non all'utente. In sostanza cambia il soggetto a cui si indirizzano: l'eccezione allo user, l'assert al developer
Spero la differenza sia chiara
Mi faresti un esempio di...un metodo...dove per esempio si usa un' asserzione?
puoi fare una roba del genere
avrai una AssertException se sei fuori dal rangecodice:public static void main( String args[] ){ Scanner scanner = new Scanner( System.in ); System.out.print( "Enter a number between 0 and 20: " ); int value = scanner.nextInt(); assert( value >= 0 && value <= 20 ) : "Invalid number: " + value; System.out.println( "You have entered " + value ); }
Mh...penso di avere capito...ma a me non funziona....
Perchč mi lancia l'eccezione ArrayIndexOutOfBounds e non mi dą quello che ho specificato nell'asserzione?codice:public class Prove { public static void main(String [] args) { int []a={1,5,4,6,8,7,0}; stampa(a, 10); } public static void stampa(int [] array, int i) { assert (i<array.length) : "FuoriRange"; System.out.println(array[i]); } }
di default le assert sono disabilitate, dovresti abilitarle prima dell'esecuzione.
per eseguire con le assert dovresti fare
codice:java -ea Prove
no, se usi eclipse o netbeans dovresti cambiare le opzioni (mettendo il parametro -ea tra le opzioni di run)
anche da riga di comando male non fa (in pratica quando premi run non fai altro che fare una chiamata a java mainclass