2009-10-19 6 views
4

J'ai une question à propos du lancer. Comment le lancer fonctionnera-t-il dans le code suivant? Est-ce que le bloc de capture renvoie false?Try-Catch et comment lancer le travail dans le bloc catch

try 
{ 
    //code 
} 
catch(Exception ex) 
{ 
    throw; 
    return false; 
} 
+1

Vous voudrez peut-être lister la langue que vous utilisez. –

+1

La meilleure chose à faire est d'écrire du code et de l'exécuter dans le débogueur. –

+0

@bodnarbm: oui, mais la syntaxe est probablement C++ ou un peu comme Java, et le comportement par rapport à la question ne varie pas entre ces deux langages. Je ne serais pas surpris de constater que C# ressemble et fonctionne de manière très similaire - mais je ne le sais pas. –

Répondre

12

Non, il est recopié. Quelque part, la pile d'appels doit l'attraper. Le return false n'est jamais atteint.

+0

wiil retourne-t-il aussi faux? –

+0

Non. Il n'y aura pas de valeur de retour –

+0

uniquement si la partie du code qui l'attrape renvoie false. – AlbertoPL

2

Il n'y a pas de valeur de retour. throw arrête l'exécution de la méthode et le bloc appelant recevra l'exception renvoyée.

3

Lancer et retourner false n'a pas de sens. Des exceptions sont utilisées pour indiquer quand des erreurs surviennent, il n'y a donc aucune raison d'avoir un indicateur booléen indiquant cela en même temps. Supposons que votre try/catch soit dans une classe BankAccount. Si votre code client ressemble à ceci:

boolean success = bankAccount.withdraw(20.00); 
if(success == false) System.out.println("An error! Hmmm... Perhaps there were insufficient funds?"); 
else placeInWallet(20.00); 

Vous pourriez faire ceci:

try { 
    bankAccount.withdraw(20.00); 
    placeInWallet(20.00); 
} 
catch(InsufficientFunds e) { 
    System.out.println("An error! There were insufficient funds!"); 
} 

Ce qui est plus propre parce qu'il ya une séparation claire de la logique normale de la logique de gestion des erreurs.

Questions connexes