178 votes

Quelle est l’utilisation d’une variable statique privée en Java ?

Si une variable est déclarée comme public static var_name;, alors je peux y accéder à partir de n'importe où, ClassName.var_name. Je suis également conscient que les membres statiques sont partagés par toutes les instances d'une classe et ne sont pas réaffectés dans chaque instance.

Est la déclaration d'une variable en tant que private static var_name; toute différente de la déclaration d'une variable private var_name;?

Dans les deux cas, il ne peut être accédé qu' ClassName.var_name ou ClassInstance.var_name de toute autre classe.

Ne déclarer la variable comme statique de lui donner d'autres propriétés particulières?

149voto

Jesper Points 65733

Bien sûr, il peut être accédé comme ClassName.var_name, mais seulement à partir de l'intérieur de la classe dans laquelle il est défini - c'est parce qu'il est private.

public static ou private static variables sont souvent utilisés pour les constantes. Par exemple, beaucoup de gens n'aiment pas "coder en dur" constantes dans leur code; - ils faire un public static ou private static variable avec un nom explicite et de l'utiliser dans leur code, ce qui devrait rendre le code plus lisible. (Vous devez également faire de telles constantes final).

Par exemple:

public class Example {
    private final static String JDBC_URL = "jdbc:mysql://localhost/shopdb";
    private final static String JDBC_USERNAME = "username";
    private final static String JDBC_PASSWORD = "password";

    public static void main(String[] args) {
        Connection conn = DriverManager.getConnection(JDBC_URL,
                                         JDBC_USERNAME, JDBC_PASSWORD);

        // ...
    }
}

Si vous faites c' public ou private dépend si vous voulez que les variables qui doivent être visibles de l'extérieur de la classe ou pas.

103voto

TofuBeer Points 32441

Les variables statiques ont une seule valeur pour toutes les instances d’une classe.

Si vous deviez faire quelque chose comme :

et puis vous vouliez changer votre nom, c’est bien, que mon nom est immuable. Si, toutefois vous voulez le changer afin que vous aviez 17 yeux puis tout le monde aurait également 17 yeux.

51voto

Jon Skeet Points 692016

Privé de variables statiques sont utiles dans la même manière que privé, les variables d'instance sont utiles: ils stockent de l'état qui est accessible uniquement par le code au sein de la même classe. L'accessibilité (privé/public/etc) et de l'instance/la nature statique de la variable sont entièrement orthogonale de concepts.

Je voudrais éviter de penser à des variables statiques comme étant partagé entre "toutes les instances" de la classe - qui suggère, il y a au moins un exemple pour que l'état soit présent. Sans une variable statique est associée avec le type lui-même au lieu de toutes les instances de ce type.

Donc, à tout moment vous voulez un certain état qui est associée avec le type plutôt que d'un cas particulier, et que vous voulez garder cet état privé (permettant peut-être d'accès contrôlé via les propriétés, par exemple), il est logique d'avoir un privé variable statique.

En aparté, je vous recommande fortement que le seul type de variables que vous le rendre public (ou même non-privé) sont des constantes static final variables immuables types. Tout le reste doit être privé de l'amour de la séparation de l'API et la mise en œuvre (entre autres choses).

13voto

Farid Farhat Points 1899

Eh bien, vous êtes droit public des variables statiques sont utilisées sans en faire une instance de la classe mais les variables statiques sont pas. La principale différence entre eux et où j'utilise le privé variables statiques, c'est quand vous avez besoin d'utiliser une variable dans une fonction statique. Pour les fonctions statiques, vous pouvez uniquement utiliser des variables statiques, afin de vous les rendre privés de ne pas accéder à partir d'autres classes. C'est le seul cas je utiliser private static.

Voici un exemple:

Class test {
   public static String name = "AA";
   private static String age;

   public static void setAge(String yourAge) {
       //here if the age variable is not static you will get an error that you cannot access non static variables from static procedures so you have to make it static and private to not be accessed from other classes
       age = yourAge;
   }
}

9voto

Swaranga Sarma Points 4110

Eh bien, variables peuvent être utilisés pour partager des données entre instances de cette classe. Pendant que vous êtes correct que nous ne pouvons pas accéder à la variables à l’aide de constructions, telles que ou , mais le membre sera toujours visible depuis les méthodes de cette classe ou les instances de cette classe. Donc, en effet, les instances de cette classe sera toujours en mesure de faire référence au membre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X