Le code suivant compile OK même si le bloc d'essai ne jette aucune exception. mais si la capture est remplacée par une sous-classe d'exception, le code gagné ' t compiler. P> public static void main(String[] args) {
try {}
catch (IOException e) {} // won't compile.
}
3 Réponses :
Le compilateur peut savoir exactement quelle partie du code peut lancer un D'autre part, l'exécution ou les exceptions non cochées em> ne sont pas censées être attendues, et étant donné que ioException code> car il s'agit d'une exception cochée em>, donc chaque méthode pouvant lancer ce type d'exception doit spécifier dans la signature de la méthode. p>
RunTimeException code> (la classe mère des exceptions non cochées) étend également la classe
Exception code>, puis le compilateur est correct avec celui-ci. P>
Exception code> a des sous-classes non cochées d'exceptions (
RunTimeException code> étend
exception code>).
jetable code> se comportera de la même manière.
RunTimeException code> ou sous-classes de
RunTimeException code> se comportera de la même manière. Sous-classes de
Exception code> autre que
RunTimeException code> ne sera pas. P>
La réponse de Manouti semble correcte, mais selon la documentation Java: P>
C'est une erreur de compilation si une clause de capture attrape un type d'exception vérifié Type E1, mais il n'existe pas de type d'exception vérifié Type E2 de telle que toutes les personnes suivantes: P>
E2 <: E1 Le bloc d'essai correspondant à la clause de capture peut lancer e2 Pas de bloc de prise précédent de la déclaration d'essai immédiatement entourant attrape E2 ou un super-espèce de E2. Sauf si e1 est l'exception de classe. strong> p> blockQuote>
Il existe un cas explicite pour le lancement d'une instance code> code> (la classe
code> est exceptionnelle, on pourrait dire). C'est la documentation Java 5, mais à moins que quelqu'un ne voit autrement, je doute fort que cela ait changé depuis P>
regarder l'arborescence d'héritage pour
exception code> et
ioexception code> p>
https://docs.oracle.com/ Javase / 7 / Docs / API / Java / Lang / Exception.html P>
et p>
https: // docs.oracle.com/javase/7/docs/api/java/io/ioException.html?is-external=true p>
Dans Java 7, je ne vois pas que la discussion sur des exceptions cochées / décochées est directement pertinente - alors qu'il est vrai que des exceptions non cochées ne suivent pas les mêmes règles, des exceptions non cochées doivent hériter de
runtimédiesxception code >, que
exception code> n'est bien sûr pas (c'est le parent de cette classe) p>
https://docs.oracle. COM / Javase / Spécifications / JLS / SE5.0 / HTML / Classes.HTML # 308526 P>
(Encore une fois, Java 5 docs, mais cela n'a pas changé) https://docs.oracle.com/javase/specs /jls/se5.0/html/Exception.html P>
RunTimeException code> S est également
exception code> s, donc toutes les exceptions ne sont donc pas cochées.