Erreurs de compilation, d'exécution et de logique
Les trois familles d'erreurs d'un programme Java : ce que refuse le compilateur, ce qui plante à l'exécution et ce qui tourne en donnant un résultat faux, avec la lecture d'un vrai message de javac.
- 25 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Erreur de compilation : de quoi s'agit-il ?
Voir la réponse
Erreur que le compilateur détecte avant toute exécution (syntaxe, type, symbole inconnu, retour manquant) ; tant qu'elle subsiste, le programme ne peut pas être lancé.
javac donne le fichier, la ligne et le message, par exemple
B.java:6: error: ';' expected. Elle se corrige à l'écran, avant que le moindre utilisateur ne la rencontre.javac affiche
A.java:8: error: missing return statement, ligne de l'accolade fermante designe. Quelle est la cause ?
```java
static int signe(int n) {
if (n > 0) {
return 1;
} else if (n < 0) {
return -1;
}
}`- Si
nvaut 0, aucunreturnn'est atteint - Une méthode ne peut contenir qu'un seul
return, placé en dernière ligne - Un
else ifdoit toujours être suivi d'unelsevide, même si inutile - Les deux
returnsont dans des blocs, donc invisibles de la méthode
Voir la réponse
Si
nvaut 0, aucunreturnn'est atteintLe compilateur examine tous les chemins d'exécution : pour
n == 0, niifnielse ifne s'applique, et la méthode se termine sans valeur. javac signale la fin de la méthode, pas leiffautif ; ajouter unelse { return 0; }règle le cas.- Si
Pour produire les fichiers .class, on lance la commande … ; pour exécuter le programme compilé, on lance la commande ….
Voir la réponse
Pour produire les fichiers .class, on lance la commande javac ; pour exécuter le programme compilé, on lance la commande java.
Les deux étapes sont distinctes : une erreur de compilation empêche la seconde, une erreur d'exécution ne se voit qu'à la seconde.
Erreur de syntaxe : de quoi s'agit-il ?
Voir la réponse
Écriture qui ne respecte pas la grammaire du langage : point-virgule oublié, parenthèse ou accolade non fermée, mot-clé mal orthographié.
C'est une erreur de compilation : rien ne s'exécute.
int x = 3sans point-virgule donneerror: ';' expected, avec une flèche juste après le3.Le code
int sum = 7, count = 2; double avg = sum / count;affiche3.0au lieu de3.5. Sans message d'erreur. De quelle famille est ce défaut ?- Compilation : javac aurait dû refuser de ranger un
intdans undoublesans cast - Exécution : une exception est avalée sans bruit par la machine virtuelle pendant la division
- Logique :
7 / 2est une division entière, calculée avant la conversion endouble - Avertissement : javac signale que le résultat d'un
doubleest toujours approximatif
Voir la réponse
Logique :
7 / 2est une division entière, calculée avant la conversion endoubleRanger un
intdans undoubleest permis, sans perte. Le défaut est en amont : les deux opérandes sont entiers, donc le quotient est 3. Il suffit de convertir un opérande :(double) sum / count.- Compilation : javac aurait dû refuser de ranger un