java “void” et “non nulle” constructeur
J'ai écrit cette simple classe java juste pour le test de certaines de ses caractéristiques.
public class class1 {
public static Integer value=0;
public class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = new class1();
System.out.println(class1.value);
}
}
La sortie est:
2
Mais dans ce code:
public class class1 {
public static Integer value=0;
public void class1() {
da();
}
public int da() {
class1.value=class1.value+1;
return 5;
}
public static void main(String[] args) {
class1 h = new class1();
class1 h2 = new class1();
System.out.println(class1.value);
}
}
La sortie de ce code est:
0
Alors pourquoi ne pas, lorsque j'utilise void
dans la méthode constructeur de la déclaration, le champ statique de la classe ne changera plus?
Que la deuxième n'est pas un constructeur. C'est juste une méthode qui se partage un nom avec sa classe.
Parce que ce n'est plus un constructeur.
la réponse à cette question semblable Pourquoi les constructeurs en java ont pas de type de retour donne une bonne raison.
son incroyable que vous avez écrit la réponse juste avant que je puisse actualiser la page ; tnx tous,
Parce que ce n'est plus un constructeur.
la réponse à cette question semblable Pourquoi les constructeurs en java ont pas de type de retour donne une bonne raison.
son incroyable que vous avez écrit la réponse juste avant que je puisse actualiser la page ; tnx tous,
OriginalL'auteur Hadi | 2014-07-25
Vous devez vous connecter pour publier un commentaire.
En Java, le constructeur n'est pas une méthode. Il n'a que le nom de la classe et une visibilité spécifique. Si elle déclare que renvoie quelque chose, alors il n'est pas un constructeur, même pas si elle déclare que renvoie une
void
. Notez la différence ici:Aussi, si une classe ne définit pas un constructeur, alors le compilateur va ajouter automatiquement un constructeur par défaut pour vous.
Éviter ce genre de confusion est une autre bonne raison de suivre la méthode des conventions de nommage dans le JLS.
En Java, un constructeur est précisément quelque chose qui ressemble beaucoup à une méthode, mais n'est pas une méthode.
Oui, je sais cela. Mais en le faisant, AST analyse avec Java, je l'ai vu venir à travers comme une méthode à pas de type de retour (d'où, le constructeur).
OriginalL'auteur Luiggi Mendoza
public void classe1() n'est pas un constructeur, c'est un vide, une méthode dont le nom correspond au nom de la classe. Il n'est jamais appelé. Au lieu de java crée un constructeur par défaut (puisque vous n'avez pas créé un), qui ne fait rien.
OriginalL'auteur Khary Mendez
À l'aide de vide dans le constructeur, par définition, la conduit à ne plus être le constructeur.
Le constructeur spécifiquement n'a pas de type de retour. Alors que nul ne retourne pas une valeur dans le sens le plus strict du mot, il est toujours considéré comme un type de retour.
Dans le deuxième exemple (lorsque vous utilisez le vide), vous auriez à faire
h.class1()
pour la méthode pour obtenir appelée parce qu'elle n'est plus le constructeur. Ou vous pouvez simplement supprimer le vide.OriginalL'auteur Cal Stephens
C'est sans doute un défaut de conception en Java.
Parfaitement légal. Ne devrait probablement pas être, mais est.
Dans votre exemple, classe1() n'est jamais appelée, parce que ce n'est pas un constructeur. Au lieu de cela, le constructeur par défaut est appelé.
Suggestion: se familiariser avec les conventions de nommage Java. Les noms de classe doit commencer par une majuscule.
MyClass x = new MyClass(); x.MyClass();
Parfaitement valide.OriginalL'auteur Lin Sherman