6 votes

Blocs statiques et variables

Pourquoi, dans le code ci-dessous, l'affectation d'une valeur à la variable statique est acceptable mais l'utilisation de cette même variable ne l'est pas ?

class Test
{
static
{
   var=2;  //There is no error in this line
   System.out.println(var); //Why is there an error on this line if no error on the above     line
}
static int var;
}

3voto

Jonathon Faust Points 7543

L'erreur que vous obtenez est Test.java:6: illegal forward reference . Déplacez le int var avant le bloc statique.

2voto

JRL Points 36674

Parce que l'usage n'est pas sur le côté gauche d'une affectation comme expliqué ci-dessous :

De la section 8.3.2.3 de la JLS, Restrictions sur l'utilisation des champs pendant l'initialisation :

La déclaration d'un membre le membre est un champ d'instance (respectivement statique) d'une classe ou d'une interface C et que toutes les conditions suivantes sont remplies :

  • L'utilisation se fait dans une variable d'instance (respectivement statique)
    initialisateur de C ou dans un initialisateur d'instance (respectivement statique)
    de C.

  • L'usage ne se trouve pas sur le côté gauche d'une affectation.

  • C est la classe ou l'interface la plus interne qui englobe l'utilisation.

Une erreur de compilation se produit si l'une des trois exigences ci-dessus est ne sont pas remplies.

0voto

Romain Guidoux Points 2245

Essayez comme ceci :

class Test
{
static int var;
static
{
   var=2;  //There is no error in this line
   System.out.println(var); //Why is there an error on this line if no error on the above     line
}
}

Avec la déclaration avant l'utilisation

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X