Evénement exceptionnel
Evénement non voulu
Comportement anormal du programme développé
Existence d'un mécanisme intégré permettant de lancer et de gérer les exceptions.
Objectif : gérer proprement les erreurs qui arrivent pendant l'exécution
Comment marche le programme quand les fonctions s'appellent entre elles ?
public static void main(String[] args) {
int random = getNumberBetween(-10, 60);
System.out.println(random);
}
public static int getNumberBetween(int lowLimit, int highLimit) {
int result = 0;
if (lowLimit < 0 && highLimit < 0) {
result = (int) ((lowLimit - highLimit) * getRandomNumber()) + highLimit;
} else {
result = (int) ((highLimit - lowLimit) * getRandomNumber()) + lowLimit;
}
return result;
}
public static double getRandomNumber() {
return Math.random();
}
Est-ce possible dans l'exemple précédent ?
Non, ça parait difficile
Exemple : On demande à l'utilisateur de spécifier le chemin d'un fichier qu'on veut lire
Potentiels problèmes :
Une fonction gère et/ou lance des exceptions.
public static int[] getLimitsFromFile(String limitPath) throws FileNotFoundException {
int[] limits = new int[2];
Scanner scanner = new Scanner(new File(limitPath));
limits[0] = scanner.nextInt();
scanner.nextLine();
limits[1] = scanner.nextInt();
scanner.nextLine();
scanner.close();
return limits;
}
public static void main(String[] args) {
System.out.println("Bienvenue dans l'application de calcul de nombre aléatoire !");
int[] limits;
try {
String limitPath = getFileNameFromConsole();
limits = getLimitsFromFile(limitPath);
System.out.println(getNumberBetween(limits[0], limits[1]));
} catch (FileNotFoundException e) {
System.out.println("Le fichier \"limite\" que vous avez spécifié n'existe pas.");
System.out.println("Impossible de calculer un nombre aléatoire.");
} finally {
System.out.println("Merci d'avoir utilisé mon application, aurevoir");
}
}
Le try est le bloc où les instructions sont autorisées à renvoyer des exceptions
Le(s) catch(s) sont là pour capturer les exceptions lancées dans le try et agir en conséquence
Le finally est un bloc qui s'exécute dans tous les cas même après une exception
Les ressources utiles pour approfondir les notions de Stream