2010-08-19 5 views
0

Dans quelles circonstances utiliseriez-vous la variable de champ au lieu de la variable locale? J'ai trouvé un peu difficile de décider quand une variable est utilisée dans 2 méthodes ou plus dans une classe. J'ai tendance à utiliser des variables locales et à les transmettre à une autre méthode.Quand utiliser une variable de champ?

Merci,

Sarah

+0

En relation/en double: http://stackoverflow.com/questions/1794141/java-instance-variables-vs-local-variables –

Répondre

6

En termes orientés objet, la variable a-t-elle un sens en tant qu'attribut de l'objet? Si c'est le cas, vous devriez en faire une variable de champ. Sinon, cela peut aller dans un sens ou dans l'autre. Rappelez-vous le principe de responsabilité unique - les classes bien conçues ne devraient avoir qu'une seule responsabilité, et donc seulement une raison de changer.

1

je passerais certainement pas les variables autour d'autres méthodes moins qu'il y ait une raison très spécifique. Si la variable est utilisée plusieurs fois dans la classe, faites-en une variable de champ. Cela rend presque toujours votre code beaucoup plus flexible.

En général, vous pouvez aussi penser si la variable a du sens en tant que partie de la classe. Autrement dit, il est logique d'avoir une classe Car avoir la variable numOfMiles, même si elle n'est utilisée que quelques fois. Cependant, si une méthode est int GetAmountOfGasUsed(int milesThisTrip), il est logique de transmettre la variable miles comme variable locale car la distance que vous parcourez n'est probablement pas spécifique à la voiture.

7

Un champ indique un type d'état lié à une instance de votre classe. Par exemple, un BankAccount peut avoir un champ balance.

Vous ne devez jamais utiliser un champ pour simplifier la transmission de données d'une méthode à une autre méthode. Ce n'est tout simplement pas son but. Cela rend également vos méthodes intrinsèquement dangereuses ou nécessitent une synchronisation.

Une variable locale est simplement un stockage temporaire de données utilisé pour prendre en charge une opération effectuée par une méthode. Par exemple,

public void addInterest(double rate) { 
    double toAdd = rate * balance; 
    logTransaction("Interest", toAdd); 
    balance += toAdd; 
} 

toAdd ici n'a pas de sens comme un champ puisqu'il est temporaire à l'opération, ne fait pas partie de l'état du compte.

0

Si les méthodes qui utilisent la variable doivent également modifier la valeur, alors en faire une variable de champ. Mais, s'ils ne lisent que la valeur, vous pouvez la transmettre en toute sécurité.

Questions connexes