2017-09-10 1 views
4

Voici mon code, lorsque je commente statement-2, il est conforme aux amendes mais lorsque je ne commente pas, il donne l'erreur Compile Time "Unreachable Code".Gestion des exceptions Code inaccessible

Je comprends pourquoi j'obtiens l'erreur après décommentant, mais ma question est, même si je commente ce toujours le bad() est injoignable comme je suis throwing une exception est prise alors pourquoi il ne donne pas l'erreur pour elle?

class Varr 
{ 
    public static void main(String[] args) throws Exception 
    { 
    System.out.println("Main"); 
    try { 
     good(); 
    } catch (Exception e) { 
     System.out.println("Main catch"); 
     //**Statement 1**  
     throw new RuntimeException("RE"); 
    } finally { 
     System.out.println("Main Finally"); 
     // **Statement 2**  
     throw new RuntimeException("RE2"); 
    } 
    bad(); 
    } 
} 
+0

'mauvais()' est pas inaccessible, si vous en commentaire 'Déclaration 2'. Je pense que vous avez une idée fausse sur 'finalement '. Et une remarque: vous ne devriez ni retourner ni jeter quelque chose dans un bloc 'finally'. Cela peut conduire à un comportement bien défini, mais difficile à comprendre. Dans votre exemple, vous lancerez toujours une exception '' RE2 "' puisque 'finally' est toujours exécuté et bat tout. – Turing85

Répondre

3

mais ma question est, même si je commente ce toujours le mauvais() est inatteignable que je lance une exception est prise alors pourquoi il ne donne erreur pour elle?

Parce que l'exécution entrera pas nécessaire dans la déclaration catch.
Supposons que good() n'a pas jeté une exception, si vous ne saisissez pas dans le catch et donc bad() est alors exécutée:

public static void main(String[] args) throws Exception 
{ 
    System.out.println("Main"); 
    try { 
     good(); // doesn't throw an exception 
    } catch (Exception e) { 
     System.out.println("Main catch"); 
     throw new RuntimeException("RE"); 
    } 
    bad(); // execution goes from good() to here 
} 
+0

merci pour la réponse, je l'ai compris. Aussi, si je lance une exception dans try block qui fera en sorte que catch block s'exécute, en gardant le catch block tel quel et en supprimant le block finally alors aussi bad() devient inaccessible –