Exception Java n'est pas pris?

J'ai un petit théorique problème avec try-catch constructions.

J'ai pris un examen pratique, hier, à propos de Java et je ne comprends pas l'exemple suivant:

try {
    try {
        System.out.print("A");
        throw new Exception("1");
    } catch (Exception e) {
        System.out.print("B");
        throw new Exception("2");
    } finally {
        System.out.print("C");
        throw new Exception("3");
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}

La question était "que la sortie va ressembler?"

J'étais sûr que ce serait AB2C3, MAIS surprise surprise, il n'est pas vrai.

La bonne réponse est ABC3 (testé et c'est vraiment comme ça).

Ma question est, d'où vient l'Exception("2") aller?

  • +1 Ahh homme, je savais que cette réponse. On m'a demandé dans une interview. C'est une très bonne question pour comprendre comment les try/catch/finally travaux sur la pile.
  • Il n'y a qu'une instruction d'impression qui pourrait imprimer un certain nombre (le dernier: print(e.getMessage())). Vous pensiez que la sortie serait AB2C3: avez-vous pensé de l'extérieur catch bloc sera exécuté deux fois?
  • En java, avant une instruction de contrôle de transfert hors du bloc catch est exécuté, le bloc finally est exécuté à condition qu'il existe. Si seulement le code dans le bloc finally ne pas transférer le contrôle à l'extérieur, le retard dans l'instruction de bloc catch est exécuté.
InformationsquelleAutor Kousalik | 2013-08-07