J'ai créé ci-dessous une exception définie par l'utilisateur ( ci-dessous est L'exception que je reçois p> MyException code>), qui s'étend
exception code>, je tente maintenant de créer un
nullpointerexception code>, mais plutôt de lancer (
myException code>), il lance la même exception générique (
nullpointException code>)
3 Réponses :
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 code> est
NULL code> de sorte que l'exception qui est lancée est un
nullpointexception code>. 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 p>
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 i> suggérer de faire si (a == null) lancer une nouvelle myException (); code> 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 Code>
@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 code>. 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.
déclarant qu'un procédé Il fait jette myException code> signifie qu'il peut em> lancer cette exception. P>
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
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(...); } }
S'il vous plaît, ne suggérez pas d'attraper exception code>. 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.
Parce que l'accès à une méthode sur
null code> jette une nullpointException.