Existe-t-il une différence entre définir les attributs de classe et les initialiser ? Y a-t-il des cas où vous voulez faire l'un sur l'autre?
Exemple:
Les extraits de code suivants devraient souligner la différence que je veux dire. J'utilise là une primitive et un objet:
import Java.util.Random;
public class Something extends Activity {
int integer;
Random random = null;
Something(){
integer = 0;
random = new Random();
....
vs.
import Java.util.Random;
public class Something extends Activity {
int integer = null;
Random random;
Something(){
integer = 0;
random = new Random();
....
Tout d'abord, vous ne pouvez pas définir une primitive pour qu'elle soit nulle car une primitive n'est que des données où null
est une référence d'objet. Si vous avez essayé de compiler int i = null
vous obtiendrez une erreur de types incompatibles.
Deuxième initialisation des variables à null
ou 0
lorsque les déclarer dans la classe est redondant comme en Java, les primitives par défaut sont 0
(ou false
) et les références d'objet par défaut à null
. Ce n'est pas le cas pour les variables locales cependant, si vous essayez ce qui suit, vous obtiendrez une erreur d'initialisation au moment de la compilation
public static void main(String[] args)
{
int i;
System.out.print(i);
}
Les initialiser explicitement à une valeur par défaut de 0
ou false
ou null
est inutile mais vous voudrez peut-être leur donner une autre valeur par défaut, vous pouvez créer un constructeur qui a les valeurs par défaut par exemple
public MyClass
{
int theDate = 9;
String day = "Tuesday";
// This would return the default values of the class
public MyClass()
{
}
// Where as this would return the new String
public MyClass (String aDiffDay)
{
day = aDiffDay;
}
}
Shanku et Morpheus ont répondu correctement à la question. Tout d'abord, vous obtiendrez une erreur de compilation en définissant votre variable int primitive "entier" sur null; vous ne pouvez le faire que pour les objets. Deuxièmement, Shanku a raison: Java attribue des valeurs par défaut aux variables d’instance , qui sont "entières" et "aléatoires" dans votre exemple de code; les variables d'instance sont visibles dans la classe ou au-delà selon la portée (public, privé, protégé, package).
Cependant, les valeurs par défaut ne sont pas affectées aux variables locales . Par exemple, si vous avez affecté une variable dans votre constructeur comme "int height;" alors il ne sera pas initialisé à zéro.
Je recommanderais de lire le documentation des variables Java , qui décrivent très bien les variables et de plus, vous pouvez également consulter les tutoriels Java , qui sont encore une fois un excellent matériel de lecture.
En Java, l'initialisation est définie explicitement dans la spécification du langage. Pour les champs et les composants de tableau, lorsque les éléments sont créés, ils sont automatiquement définis sur les valeurs par défaut suivantes par le système:
nombres: 0 ou 0,0
booléens: faux
références d'objet: null
Cela signifie que la définition explicite des champs sur 0, false ou null (selon le cas) est inutile et redondante.