0
votes

Pourquoi l'exception définie par l'utilisateur ne jette pas sur une exception générique?

J'ai créé ci-dessous une exception définie par l'utilisateur ( MyException ), qui s'étend exception , je tente maintenant de créer un nullpointerexception , mais plutôt de lancer ( myException ), il lance la même exception générique ( nullpointException ) xxx xxx

ci-dessous est L'exception que je reçois xxx


1 commentaires

Parce que l'accès à une méthode sur null jette une nullpointException.


3 Réponses :


3
votes

Le fait que vous déclarez qu'une méthode jette une exception ne signifie pas qu'il lancera cette exception lorsque toute autre exception est lancée dans le code.

Dans ce cas, a est NULL de sorte que l'exception qui est lancée est un nullpointexception . Si vous souhaitez lancer votre exception personnalisée, vous devez vérifier si votre valeur est nulle et jette votre exception personnalisée, comme celle-ci xxx


5 commentaires

Il suffit d'utiliser des lancers, est inutile dans ce cas? Alors est-ce que cela signifie que je devrais envelopper mon identifiant à l'intérieur, essayez toujours un bloc de capture?


Je voudrais fortement suggérer de faire si (a == null) lancer une nouvelle myException (); plutôt que cela pour éviter de remplir la trace de pile double. J'envisagerais également une légère reformulation de la première partie à mettre en évidence que déclarer une exception ne cause pas réellement que celle-ci soit lancée, vous devez réellement le jeter. (Je sais que votre exemple montre cela, mais il semble que l'OP soit confondu sur ce fait.)


@ user2478398 Vous avez raison. Je répare le essayer ... Catch


@Renseabi Je pense que vous pouvez être un peu confus sur la façon dont les exceptions fonctionnent. En principe, même ceux que vous rencontrez dans la bibliothèque standard sont projetés par une pièce de code avec un lancer . C'est votre code qui décide s'il est justifié d'une exception, ils ne figurent pas simplement parce que vous dites qu'une méthode peut les jeter. Vous devez leur dire dans quel cas les jeter, qui est réalisé en jetant une exception lorsque certaines conditions sont remplies.


@Federicoklezculloca Oui, ça a l'air mieux pour moi. UPPED.



1
votes

déclarant qu'un procédé jette myException signifie qu'il peut lancer cette exception.

Il fait pas signifie que toutes les exceptions levées sont automatiquement enveloppées dans votre myException


3 commentaires

Si je veux lancer une exception dans ce cas, devrais-je toujours envelopper mon code à l'intérieur d'essayer un bloc?


Comme il s'agit d'une exception vérifiée, vous devriez envelopper l'invocation en try-attraper ou repousser l'exception plus haut.


Que ou vérifiez pour NULL à l'avance et jetez votre exception



0
votes

L'utilisation de Jantes myException signifie que la méthode peut lancer une exception et que vous devez le gérer, mais cela ne signifie pas toutes les exceptions que vous obtenez à l'intérieur de la méthode sera lancée comme myException. Si vous voulez jeter toutes les exceptions, vous obtenez comme myException que vous pouvez faire:

public static void main(String[] args) throws MyException {
   try{
       String a = null;

       callMethod(a);
   }catch(Exception e){
      throw new MyException(...);
   }
}


1 commentaires

S'il vous plaît, ne suggérez pas d'attraper exception . C'est mauvais design. Je vois ce que vous essayez de faire, et dans ce cas, ce n'est probablement pas dangereux, mais en général, c'est un bon moyen d'écrire impossible à déboguer le code.