Quelles sont objet java champs initialisés avec?
Est-il null
pour Object
type?
class C {
int i;
String s;
public C() {}
}
Sera s
être toujours null
?
Que sur les types simples comme int
? Que sera-ce? Zéro ou une valeur arbitraire?
Que sur les variables locales dans les méthodes?
public void meth() {
int i;
}
Quelle est la valeur non de i
?
En s'appuyant sur ces valeurs par défaut, cependant, est généralement considéré comme une mauvaise
le style de programmation.
Ok, que suggérez-vous nous faire?
class A {
String s = "";
int i = 0;
}
OU:
class A {
String s;
int i;
public A() {
//default constructor
s = "";
i = 0;
}
}
Ce qui est mieux et pourquoi?
OriginalL'auteur EugeneP | 2009-12-16
Vous devez vous connecter pour publier un commentaire.
De soleils java tutoriel
OriginalL'auteur stimpie
Pour les variables membres:
La valeur par défaut de Chaîne est nulle. La valeur par défaut pour les primitives est de 0 (ou de 0,0 pour les valeurs à virgule flottante).
Pour les variables locales:
Vous devez explicitement l'initialisation d'une variable avant de l'utiliser.
Quant à la deuxième partie de votre question:
Vous pouvez toujours dire
String s = "";
dans le membre de définition des variables, ous = "";
dans le constructeur. Alors vous savez qu'il aura une valeur non null. (Aussi, dans votre définition, vous devez vous assurer que personne n'essayez pas de les définir à null).ou null pour les objets
<<Également, dans votre définition, vous devez vous assurer que personne n'essayez pas de les définir à null>> des tonnes et des Tonnes de stupide de travail. Bien sûr, je peux le faire. Mais ce n'est pas ce que j'attends de style de programmation. Supposons que vous avez à faire pour 1000 champs.
C'est quoi cette attitude? C'est tout ce que vous avez en Java, sans dépendre d'un tiers de la bibliothèque (comme par nd Google Collections de réponse) ou la rédaction d'un "chèque pour les nuls" méthode vous-même (ou à l'aide de l'AOP ou de l'octet code de la manipulation ou de certains autres infâme manipulation).
Je vous remercie pour votre réponse & commentaires. Google Collections de l'air très intéressant. Il vaut la peine d'essayer.
OriginalL'auteur Ash
Champs: Objets par défaut null; ints, des longs et courts métrages à 0; les Chaînes null; booléen à false. C'est tout ici.
Le compilateur va vous forcer à initialiser les variables déclarées dans les méthodes, variables locales, vous-même.
OriginalL'auteur Joel
Primitive champs sont initialisés à
0
/false
. Les objets sont initialisés ànull
. Mais franchement, vous pourriez avoir essayé..->franchement, vous pourriez avoir essayé celui-là. C'est peut-être pas de tests REPRODUCTIBLES. Vous pouvez obtenir de 0 un millier de fois. Et puis, obtenez 4 milliards que la mémoire a obtenu actualisé.
OriginalL'auteur Bozho
Comme pour le setter-méthode de la question: Le point de l'ensemble de poseurs est qu'ils peuvent vérifier si l'objet passé est conforme aux exigences de la classe. par exemple,
Ou, avec Google Collections/Google Goyave:
Bien sûr, vous pouvez définir des contraintes arbitraires, par exemple:
De sûr, dans un tel cas, vous devez toujours état la bonne plage de valeurs de propriétés dans la JavaDoc de l'incubateur et/ou de la classe.
OriginalL'auteur nd.