2017-03-10 3 views
2

Dans un bloc finally, puis-je dire quelle exception a été levée? Je comprends, que nous pouvons vérifier dans un bloc finally si une exception a été levée.Dans un bloc finally, puis-je savoir quelle exception a été levée?

+1

Vous pouvez avoir une variable dans la même portée que le 'try', et définir cela à l'exception levée dans le' catch'. Je ne pense pas qu'il existe un mécanisme intégré pour cela, et on pourrait probablement soutenir que vous vous trompez sur la conception si vous en avez besoin. Notez bien qu'une exception n'a peut-être pas été levée lorsque vous codez 'finally'. – Carcigenicate

+2

Vous ne devriez pas avoir besoin de savoir. À ce stade, vous êtes uniquement concerné par le nettoyage. Toute exception a déjà été traitée. – EJP

+0

"Je comprends, que nous pouvons vérifier dans un bloc finally si une exception a été levée." Pas sans travail supplémentaire, par ex. en gardant une variable qui est définie dans un bloc catch ou à la fin du bloc try ... –

Répondre

5

Je ne peux pas imaginer une situation dans laquelle ce serait toujours une chose sensée à faire, mais vous pouvez essayer quelque chose comme ceci:

class Main { 
    public static void throwsException() throws Exception { 
     throw new Exception(); 
    } 

    public static void main(String[] args) { 
     Exception caughtException = null; 

     try { 
      throwsException(); 
     } 
     catch (Exception e) { 
      caughtException = e; 
      e.printStackTrace(); 
     } 
     finally { 
      System.out.println(caughtException); 
     } 
    } 
} 
0

capture bloc et enfin sont 2 portées différentes. L'exception attrapé dans le bloc catch n'est pas visible à finalement bloquer. Vous pouvez utiliser la réponse Alexander pour imprimer l'exception dans le bloc finally.