Quelqu'un d’entre vous peut-il expliquer quelles sont les différences entre throw
, throws
et Throwable
et quand utiliser lesquelles?
throws
: Utilisé lors de l'écriture des méthodes, pour déclarer que la méthode en question lève l'exception spécifiée (cochée).
Contrairement aux exceptions vérifiées, les exceptions d'exécution (NullPointerExceptions, etc.) peuvent être levées sans que la méthode déclare throws NullPointerException
.
throw
: Instruction pour réellement lever l'exception. (Ou plus précisément, le Throwable).
Le mot-clé throw est suivi d'une référence à Throwable
(généralement une exception).
Exemple:
Throwable
: Une classe que vous devez étendre afin de créer votre propre, personnalisé, jetable.Exemple:
throw
: instruction pour lancer l'objet t
où t instanceof Java.lang.Throwable
doit être vrai.throws
: un jeton de signature de méthode pour spécifier les exceptions vérifiées throw
n par cette méthode.Java.lang.Throwable
: le type parent de tous les objets pouvant être levés (et attrapés).C'est vraiment facile à comprendre.
Le Java.lang.Throwable:
La classe
Throwable
est la super-classe de toutes les erreurs et exceptions en langage Java. Seulement objets qui en sont des exemples classe (ou une de ses sous-classes) sont jeté par la machine virtuelle Java ou peut être jeté par le Javathrow
statement . De même, seule cette classe ou l’un des ses sous-classes peuvent être l'argument tapez une clausecatch
. Plus
La clé Word throws est utilisée dans la déclaration de méthode. Elle spécifie le type d'exception [classe Throwable] à laquelle nous pouvons nous attendre de cette méthode.
La clé Word throw est utilisée pour lancer un objet qui est une instance de la classe Throwable.
De peur de voir quelques exemples:
Nous créons nous même une classe d'exception
public class MyException super Exception {
}
Nous créons une méthode qui crée un objet à partir de notre classe d’exception et le lève avec la clé Word jette.
private void throwMeAException() throws MyException //We inform that this method throws an exception of MyException class
{
Exception e = new MyException (); //We create an exception
if(true) {
throw e; //We throw an exception
}
}
Lorsque nous allons utiliser la méthode throwMeAException()
, nous sommes obligés de la prendre en charge de manière spécifique car nous disposons des informations indiquant qu'elle renvoie quelque chose. Dans ce cas, nous avons trois options.
La première option utilise block try et catch pour gérer l'exception:
private void catchException() {
try {
throwMeAException();
}
catch(MyException e) {
// Here we can serve only those exception that are instance of MyException
}
}
La deuxième option est de passer l'exception
private void passException() throws MyException {
throwMeAException(); // we call the method but as we throws same exception we don't need try catch block.
}
Troisième option est d'attraper et de relancer l'exception
private void catchException() throws Exception {
try {
throwMeAException();
}
catch(Exception e) {
throw e;
}
}
Pour reprendre, lorsque vous devez arrêter une action, vous pouvez lancer l’exception qui reviendra jusqu’à ce qu’il ne soit plus serveur par un bloc try-catch. Où que vous utilisiez une méthode qui lève une exception, vous devez la gérer par bloc try-catch ou ajouter les déclarations à vos méthodes.
Les exceptions à cette règle sont Java.lang.RuntimeException
, celles-ci ne doivent pas être déclarées. Ceci est une autre histoire comme l'aspect de l'utilisation des exceptions.
throw - Il est utilisé pour lancer une exception. L'instruction throw nécessite un seul argument: un objet de classe jetable.
throws - Ceci est utilisé pour spécifier que la méthode peut lever une exception
Throwable - Il s'agit de la super-classe de toutes les erreurs et exceptions du langage Java. vous ne pouvez lancer que des objets issus de la classe Throwable. throwable contient un instantané de la pile d'exécution de son thread au moment de sa création
Jeter :
est utilisé pour lancer réellement l'exception, alors que throws est déclaratif pour la méthode. Ils ne sont pas interchangeables.
throw new MyException("Exception!);
Lance:
Cela doit être utilisé lorsque vous n'utilisez pas l'instruction try catch dans votre code, mais vous savez que cette classe particulière est capable de générer une exception (uniquement les exceptions vérifiées). Dans ce cas, vous n'utilisez pas try catch block, mais écrivez en utilisant la clause throw à un endroit approprié de votre code. L'exception est renvoyée vers l'appelant de la méthode et est gérée par celui-ci. De plus, le mot clé throws est utilisé lorsque la fonction peut générer une exception vérifiée.
public void myMethod(int param) throws MyException
Throw
est utilisé pour lancer une exception, throws
(si j'ai bien deviné) est utilisé pour indiquer qu'une méthode peut lever une exception particulière, et la classe Throwable
est la super-classe de toutes les erreurs et exceptions en Java
Il existe 2 principaux types d'exceptions:
Exceptions d'exécution (décoché) : par exemple. NullPointerException, ClassCastException, ..
Checked Exceptions: eg. FileNotFoundException, CloneNotSupportedException, ..
Les exceptions d'exécution sont des exceptions qui se produisent au moment de l'exécution et le développeur ne doit pas tenter de l'attraper ou de l'arrêter. Vous n’écrivez que du code pour les éviter ou émettez une commande throw , lorsque le critère d’erreur est rempli. Nous utilisons throw dans le corps de la méthode.
public Rational(int num, int denom){
if(denom <= 0) {
throw new IllegalArgumentException("Denominator must be positive");
}
this.num=num;
this.denom=denom;
}
Cependant, pour les exceptions vérifiées, la machine virtuelle Java s'attend à ce que vous la manipuliez et donnera une erreur de compilation si elle n'est pas gérée, vous déclarez donc qu'elle lève ce type d'exception, comme indiqué ci-dessous dans la méthode clone ().
Class Employee{
public Employee clone() throws CloneNotSupportedException{
Employee copy = (Employee)super.clone();
copy.hireDate = (Date)hireDate.clone();
return copy;
}
}