2010-01-28 5 views
1

En Java, contrairement à C++, nous pouvons fournir une valeur initiale d'un champ dans sa déclaration:Valeur initiale pour une variable d'instance en Java

public class BedAndBreakfast { 

    public int capacity = 10; //initialize to 10 

    private boolean full = false; //initialize to false 
} 

Pourquoi était-il nécessaire de laisser ce temps, il peut être fait plus clairement dans un constructeur?

+2

Comment exactement est-ce "plus clair" quand fait dans le constructeur? –

Répondre

6

Il est plus clair si vous définissez la valeur par défaut avec la propriété. Si vous avez plusieurs constructeurs, vous devrez définir les valeurs dans chaque constructeur, ce qui est laid. En fin de compte, le compilateur met ces valeurs dans chaque constructeur, de sorte que le résultat net est le même. C'est juste plus lisible et facile à supporter de cette façon.

Mise à jour: Comme BalusC a noté dans son commentaire, vous pouvez utiliser un bloc initialiseur, qui est à nouveau ajouté à chaque constructeur par le compilateur:

{ 
    var1 = 10; 
    var2 = false; 
} 
+1

Vous pouvez également utiliser le bloc d'initialisation pour cela, de sorte que vous n'avez pas besoin de le copier dans tous les constructeurs. – BalusC

7

Pourquoi était-il nécessaire de permettre à ce alors qu'il peut être fait plus clairement dans un constructeur?

Ce qui est une déclaration hautement subjective. Évidemment, les développeurs Java se sont sentis différemment (tout comme moi, par exemple).

1

Beaucoup de gens considèrent que c'est plus clair, les valeurs vont de pair avec la déclaration.

De plus, l'ordre diffère, car ces affectations iront avant que le constructeur ne commence (à l'exception de la première ligne spéciale du constructeur, bien sûr).

1

Pour ajouter à ce que d'autres posté ont écrit ... Considèrent que C++ permet également spécifier certaines valeurs des variables inline:

const unsigned MAX_SPEED = 85; 

En Java, le parallèle est une variable finale statique:

static final int MAX_SPEED = 85; 

Bien sûr, même static final valeurs des variables peuvent être attribuées séparément de leurs déclarations:

static final int MAX_SPEED; 

static { 
    MAX_SPEED = 85; 
} 

Mais ce que je veux dire, c'est qu'une fois que certains types d'assignations de variables sont autorisés dans la déclaration, pourquoi ne pas tout autoriser (du point de vue de la conception du langage)?

Questions connexes