2
votes

Quel type d'erreur se produit lors de l'utilisation d'une variable non initialisée?

Je pense que le code Java suivant provoquerait une RuntimeError (techniquement parlant) car il fait référence à quelque chose d'inexistant (un peu comme accéder au 8ème élément dans un tableau de taille 5).

int i;
System.out.println(i);

Cependant, l'EDI l'attrape, le soulignant en rouge. Cela en fait-il une erreur de syntaxe / compilateur? Ou une erreur d'exécution que l'EDI est juste assez intelligent pour détecter?

En fait, est-ce une erreur du compilateur mais pas techniquement une erreur de syntaxe? J'ai toujours pensé à eux aussi, mais peut-être que les erreurs de syntaxe sont juste un type d'erreur de compilation ...

Je sais que c'est juste de la sémantique, mais j'enseigne une classe et je me sens stupide de ne pas savoir quel type de erreur c'est techniquement.


0 commentaires

4 Réponses :


2
votes

C'est une erreur de compilation, comme spécifié par le JLS:

14.4.2 . Exécution des déclarations de variables locales

Une instruction de déclaration de variable locale est une instruction exécutable. Chaque fois qu'il est exécuté, les déclarateurs sont traités dans l'ordre de gauche à droite. Si un déclarateur a une expression d'initialisation, l'expression est évaluée et sa valeur est affectée à la variable.

Si un déclarateur n'a pas d'expression d'initialisation, alors chaque référence à la variable doit être précédée de l'exécution d'une affectation à la variable, ou une erreur de compilation se produit par les règles du § 16.


0 commentaires

0
votes

Avez-vous essayé de le compiler sans l'EDI?
En Java, il est détecté comme une erreur de compilation disant: erreur: la variable i n'a peut-être pas été initialisée


0 commentaires

-3
votes

C'est une simple erreur d'exécution. L'IDE le ferait remarquer, mais si vous l'exécutez, vous obtiendrez une erreur comme je dois être initialisé


1 commentaires

Ce n'est pas une erreur d'exécution. L'erreur est générée au moment de la compilation.



3
votes

Si int i; déclare une variable locale, c'est une erreur de compilation de l'utiliser avant qu'elle ne soit affectée; voir la réponse de @ Eran pour la section pertinente du JLS.

Les erreurs de compilation et les erreurs de compilation sont des synonymes. (L'erreur du compilateur est un autre synonyme, bien que parfois les gens l'utilisent pour faire référence à des bogues dans le compilateur.)

Est-ce que cela en fait une erreur de syntaxe / compilateur?

C'est une erreur de compilation. Mais ce n'est pas une erreur de syntaxe.

Ce type d'erreur de compilation est généralement appelé une erreur sémantique .

Une erreur de syntaxe signifie que le code n'est pas conforme à la syntaxe spécifiée par le langage (telle que définie par la grammaire). En d'autres termes, l'analyseur ne peut pas l'analyser.

Une erreur sémantique est une erreur de compilation qui n'est pas une erreur de syntaxe. Selon le langage de programmation, les erreurs sémantiques peuvent inclure des éléments tels que:

  • Erreurs de type de compilation
  • symboles qui ne peuvent pas être résolus par le compilateur
  • symboles dont le type est incorrect pour le contexte
  • code inaccessible
  • utilisation de variables non initialisées
  • et ainsi de suite.

Ou une erreur d'exécution que l'EDI est juste assez intelligent pour détecter?

Ce n'est pas une erreur d'exécution.

En fait, est-ce une erreur de compilation mais pas techniquement une erreur de syntaxe?

Correct.

J'ai toujours pensé à eux comme synonymes, mais peut-être que les erreurs de syntaxe ne sont qu'un type d'erreur du compilateur ...

Ils ne sont pas synonymes. Les erreurs de syntaxe ne sont que un type d'erreur de compilation.

(Malheureusement, certaines implémentations de Javascript se réfèrent de manière confuse à toutes les erreurs de compilation comme "Erreur de syntaxe". Mais ce n'est pas pertinent si vous enseignez Java. Java n'est pas Javascript.)


0 commentaires