web-dev-qa-db-fra.com

Gestion des exceptions: lancer, lancer et lancer

Quelqu'un d’entre vous peut-il expliquer quelles sont les différences entre throw, throws et Throwable et quand utiliser lesquelles?

52
Sumithra
  • 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:

enter image description here


  • Throwable: Une classe que vous devez étendre afin de créer votre propre, personnalisé, jetable.

Exemple:

 enter image description here


83
aioobe
  • throw: instruction pour lancer l'objet tt instanceof Java.lang.Throwable doit être vrai.
  • throws: un jeton de signature de méthode pour spécifier les exceptions vérifiées thrown par cette méthode.
  • Java.lang.Throwable: le type parent de tous les objets pouvant être levés (et attrapés).

Voir ici pour un tutoriel sur l'utilisation des exceptions.

9
oksayt

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 Java throw statement . De même, seule cette classe ou l’un des ses sous-classes peuvent être l'argument tapez une clause catch . 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

2
Sachin Shanbhag

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 
1
speeday125

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

Comment lancer des exceptions

1
DixonD

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;
}
}
0
karto