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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. 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 de signe. Quelle est la cause ?

    ```java
    static int signe(int n) {
    if (n > 0) {
    return 1;
    } else if (n < 0) {
    return -1;
    }
    }
    `

    • Si n vaut 0, aucun return n'est atteint
    • Une méthode ne peut contenir qu'un seul return, placé en dernière ligne
    • Un else if doit toujours être suivi d'un else vide, même si inutile
    • Les deux return sont dans des blocs, donc invisibles de la méthode
    Voir la réponse

    Si n vaut 0, aucun return n'est atteint

    Le compilateur examine tous les chemins d'exécution : pour n == 0, ni if ni else if ne s'applique, et la méthode se termine sans valeur. javac signale la fin de la méthode, pas le if fautif ; ajouter un else { return 0; } règle le cas.

  • 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 = 3 sans point-virgule donne error: ';' expected, avec une flèche juste après le 3.

  • Le code int sum = 7, count = 2; double avg = sum / count; affiche 3.0 au lieu de 3.5. Sans message d'erreur. De quelle famille est ce défaut ?

    • Compilation : javac aurait dû refuser de ranger un int dans un double sans cast
    • Exécution : une exception est avalée sans bruit par la machine virtuelle pendant la division
    • Logique : 7 / 2 est une division entière, calculée avant la conversion en double
    • Avertissement : javac signale que le résultat d'un double est toujours approximatif
    Voir la réponse

    Logique : 7 / 2 est une division entière, calculée avant la conversion en double

    Ranger un int dans un double est 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.