J'ai quelques difficultés à comprendre les différences entre checked
y unchecked
les exceptions en Java.
- Tout d'abord,
checked
Les exceptions sont censées rechercher les anomalies au moment de la compilation. Les exemples fournis dans différentes sources citent la connectivité des bases de données, la gestion des fichiers, etc.unchecked
Les exceptions sont censées rechercher les erreurs du programmeur, comme l'indexation au-delà de la plage d'un tableau, etc.
Cela ne devrait-il pas être l'inverse ? Je veux dire, la connectivité de la base de données est faite pendant l'exécution, non ? Il en va de même pour la gestion des fichiers. Vous n'ouvrez pas un fichier au moment de la compilation, alors pourquoi une erreur éventuelle à ce sujet serait-elle recherchée au moment de la compilation ? D'un autre côté, l'indexation d'un tableau au-delà de sa plage est déjà faite dans le programme, ce qui peut être vérifié pendant la compilation (si l'index anormal est fourni par l'utilisateur pendant l'exécution, alors il est normal que ce soit un problème d'exécution). Qu'est-ce qui me manque ici ?
2 Deuxièmement, comment RunTimeException
lui-même étant unchecked
, sous-classe Exception
qui est checked
? Qu'est-ce que cela signifie ?
J'ai trouvé un exemple dans le livre d'Herbert Schildt expliquant l'utilisation de la fonction checked
exceptions :
class ThrowsDemo {
public static char prompt(String str)
throws java.io.IOException {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}
Est-ce que le throws
clause nécessaire ici ? Pourquoi je ne peux pas le faire normalement avec un try-catch
comme ceci (désolé, je ne sais pas comment simuler une IO Exception
Je n'ai donc pas pu le vérifier moi-même !)
class ThrowsDemo {
public static char prompt(String str) {
System.out.print(str + ": ");
return (char) System.in.read();
}
public static void main(String args[]) {
char ch;
try {
ch = prompt("Enter a letter");
}
catch(java.io.IOException exc) {
System.out.println("I/O exception occurred.");
ch = 'X';
}
System.out.println("You pressed " + ch);
}
}