web-dev-qa-db-fra.com

Java définition ou initialisation des attributs d'une classe

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();
        ....
19
ChrisMcJava

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;
   }
}
17
Java Devil

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.

2
Minh Nguyen

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.

1