2017-10-08 1 views
-3

Veuillez expliquer la différence entre les exceptions de retour et les exceptions de lancement?Les exceptions retournent en Java

Je vois certains programmes utilisent return new IOException() et throw new IOException(). Pourquoi nous utilisons l'instruction de retour, dans ce moment la méthode qui a inclus l'instruction de retour ci-dessus, est d'arrêter l'exécution?

+7

S'il vous plaît montrer un exemple complet quand vous avez vu une exception retournée au lieu de jeter –

Répondre

0

L'exception de lancement signifie que quelque chose ne va pas et que vous devez essayer d'attraper l'exécution ou que cela arrêtera le thread. Par contre, si vous renvoyez une exception, cela signifie que rien ne s'est produit. Vous créez juste un objet (comme tous les autres objets). Vous devez toujours jeter cet objet d'exception pour que le programme sache que l'exception s'est produite.

Supposons que vous souhaitiez une exception comme Device is not ready. Maintenant, vous pouvez garder une méthode pour créer cette exception comme celui-ci,

public Exception getMyException() { 
    return new Exception("Device is not ready yet."); 
} 

Pour utiliser cette exception vous devez appeler cette méthode et jeter l'exception comme ci-dessous,

public void checkFile() { 
    if(...check device status is not ready ...) { 
    throw getMyException();// or you could use any built-in ex like new IOException("...."); 
    } 
} 
1

s'il vous plaît expliquer la différence entre les exceptions de retour et les exceptions de lancer.

La différence est la suivante:

  • Lancer une exception est la chose normale à faire. Cela change le flux de contrôle.

  • Le retour d'une exception est légal, mais inhabituel. Cela ne change pas le flux de contrôle .

1 - ... sauf dans le sens que toute déclarationreturn fait cela. La JLS parle de l'exécution d'une déclaration complétant normalement ou complétant abruptement. Si vous voulez tous les détails, lisez JLS 14.1.


Cependant ....

return new SomeException(...); 

.... est une chose assez douteuse à faire. Le seul cas d'utilisation raisonnable que je peux penser est si votre code utilise ces objets d'exception pour signaler plusieurs erreurs, et quelque chose d'autre est de les collecter et de les signaler. Vous pouvez le faire si vous avez besoin de capturer les traces de la pile pour les emplacements où des erreurs ont été détectées. Mais sinon, l'utilisation d'exceptions comme celle-ci est tout simplement laide et inefficace.


Pourquoi nous utilisons la déclaration de retour, en ce moment, la méthode ci-dessus inclus déclaration de retour, est d'arrêter l'exécution?

No.Renvoyer une exception n'est pas différent de renvoyer une autre valeur. Cela n'arrête pas l'exécution.


Si vous nous avez montré un exemple de code d'application (réel) qui fait cela, nous pourrions essayer de l'expliquer.

+0

classe de démonstration { \t public static void main (args string []) {méthode();} \t méthode int public static() {\t \t return 5;} \t } Si nous nous concertions à propos de ce programme, méthode() renvoie la valeur 5 et arrête l'exécution de method(); class Demo {public static void principal (string args []) {method();} public static IOException method() {try {Renvoie nouvelle IOException();} finally {return new IOException();}}} Mais dans ce cas, si nous nous concordons sur la première déclaration return, elle retourne l'objet IOException et devrait arrêter l'exécution de method(), mais la dernière est exécutée, donc l'exécution de method() n'est pas stoppée. –

+1

1) Mettez votre code dans la question. Utilisez le lien "modifier" !! Votre code est presque illisible dans un commentaire. 2) Ce n'est pas le genre d'application ** réelle ** que je demandais. C'est juste un exemple de jouet. 3a) Non, ça ne devrait pas. 3b) Parce que ce n'est pas comme ça que fonctionne Java! –