Java Exceptions: exception MyException est jamais jeté dans le corps de la déclaration d'essai correspondant
Question
Je comprends l'idée de cette erreur. Mais je suppose que je ne comprends pas comment fonctionne en bas de la pile d'appel.
Fichier Main.java:
public static void main(String[] args) {
try {
Function1();
} catch (myException e) {
System.out.println(e.getMessage());
}
}
public static void Function1() {
Function2();
}
Function2 existe dans un autre fichier:
File2.java
public void Function2() throws myException {
....
}
Ainsi, à travers plusieurs appels (en bas de la pile d'appel) Je Function2 qui spécifie l'exigence « jette MyException ». Comment se fait la fonction principale (où l'erreur est dirigé à) ne reconnaît pas que je jette MyException la ligne?
Toute orientation dans où le « trou » dans mes mensonges « connaissances d'exception » serait grandement apprécié.
aitee,
La solution
Le trou est que Function2
déclare qu'il lève l'exception, mais Function1
ne fonctionne pas. Java ne creuse pas son chemin à travers les hiérarchies d'appel possibles, mais passe directement par ce que vous déclarez dans les déclarations de throws
.
Function1
se contenter de ne pas déclarer le jet probablement parce que myException
est un RuntimeException
.
Autres conseils
problème Votre est que Function1()
ne déclare pas qu'il throws myException
- ce qui signifie qu'il devrait y avoir 2 erreurs de compilation:. Une de l'exception ne pas être pris ou déclarées, et un d'attraper l'exception non déclarée