Domanda

Sto costruendo un software scientifico con un sacco di calcoli e di argomenti del corso può avere sbagliato lunghezze ecc ... Così ho usato classe IllegalArgumentException come sembrava nome giusto per il problema, ma dovrei mettere la throws IllegalArgumentException alla definizione di funzione ?

Chiedo questo perché dopo ho scritto, l'editor di Eclipse non mi ha chiesto di circondare la funzione con try e catch. Ho pensato che questo è il modo sono state applicate try e catch. Ho letto la movimentazione tutorial Java.com Eccezione eppure io non sono sicuro di aver capito la parte riguardante la mia domanda giusta però.

È stato utile?

Soluzione

RuntimeExceptions come IllegalArgumentException sono usati per indicare errori di programmazione . Il programma stesso dovrebbe raramente essere in grado di gestirlo. Qualcuno ha bisogno di correggere manualmente il codice.

I potenziali RuntimeExceptions dovrebbe essere documentato in qualche modo nel contratto di funzione (cioè javadoc), sia con l'@throws esplicita, o nel descrivere gli ingressi. Se non si dispone di un javadoc per la funzione, si consiglia di aggiungere il clausola throws solo per documentare le potenziali insidie ??di utilizzare la funzione, ma in generale l'aggiunta di tiri clausole di eccezioni di runtime è scoraggiato.

Se dando una lunghezza sbagliata non è in realtà un errore di programmazione, ma è una situazione un'eccezione, vorrei creare una nuova eccezione controllata (come BadLengthError). Se non è una situazione eccezionale, non utilizzare le eccezioni per il controllo di flusso.

Altri suggerimenti

Ci sono due tipi di eccezioni:

eccezioni di runtime (come IllegalArgumentException e NullPointerException per esempio) non hanno bisogno di essere esplicitamente presi, perché 'non dovrebbero accadere'. Quando lo fanno, ovviamente, è necessario gestire da qualche parte.

eccezioni regolari hanno bisogno di essere catturati o dichiarato da buttare perché rappresentano un genere più intrinsecamente difficili di errore.

È necessario leggere su eccezioni unchecked - eccezioni che ereditano da RuntimeException. Non hanno bisogno di essere dichiarate nell'intestazione del metodo.

http://download.oracle.com/javase/tutorial/ essenziale / eccezioni / runtime.html

L'ultimo paragrafo riassume:

Se un client può ragionevolmente prevedere per recuperare da un'eccezione, lo rendono un verificata un'eccezione. Se un cliente non può fare nulla per recuperare dalla eccezione, ne fanno un incontrollato fa eccezione.

IllegalArgumentException (insieme ad altri, per esempio NullPointerException) sono esempi di un RuntimeException. Questo tipo di eccezione non è ciò che è conosciuto come un verificata un'eccezione . Java richiede che i metodi dichiarano che le eccezioni si gettano controllato e che se un metodo chiamato potrebbe lanciare un'eccezione controllata, il metodo chiamando dovrebbero neanche dichiarare che genera l'eccezione stessa, o cattura e gestirlo.

In quanto tale, la mia raccomandazione di cemento sarebbe no, non dichiararla. Di certo, però, non si vuole essere la cattura di esso. Nella maggior parte dei casi, anche voi non volete essere gettandolo meno questo è inaspettato comportamento. Se è abbastanza normale e ragionevole per il metodo di essere sempre un valore non è così come, un'eccezione è il modo sbagliato di gestire la cosa.

Si potrebbe anche prendere in considerazione facendo uso di asserzioni.

the first point when understanding exceptions is that they are for exceptional situations. While thinking about your method you must ask: "Should this method throws an exception if an exceptional value is passed through?" If the answer is "yes", put it in your method declaration. I don't know if you get the idea, but it's kind of simple. It's just a matter of practice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top