web-dev-qa-db-fra.com

pourquoi les constantes Java sont-elles déclarées statiques?

Pourquoi les constantes Java sont-elles déclarées statiques?

class Foo{
    static final int FII = 2 ;
}

En cela, je comprends l'utilisation de la finale? Acheter pourquoi doit-il être statique? Pourquoi devrait-il s'agir d'une variable de classe et non d'une variable d'instance?

33
Vaibhav

Si cela peut varier selon l'instance d'une classe, ce n'est clairement pas un constant. Que signifierait obtenir une valeur différente de pi pour chaque instance de Math (pas que Math permette même de construire des instances)? Ou un ordre différent de la casse pour chaque instance de String?

35
Jon Skeet

Si une constante n'est pas statique, Java allouera une mémoire pour cette constante dans chaque objet de la classe (c'est-à-dire une copie de la constante par objet).

Si une constante est statique, il n'y aura qu'une seule copie de la constante pour cette classe (c'est-à-dire une copie par classe).

Par conséquent, si la constante n'a qu'une seule valeur, elle doit être déclarée statique.

Si la constante peut avoir une valeur différente pour chaque objet, par exemple l'heure de création de l'objet, elle ne doit pas être déclarée statique.

87
wannik

C'est simplement pour que vous puissiez y accéder sans une instance de cette classe.

Exiger qu'une instance soit créée uniquement pour accéder aux champs constants est un peu un gaspillage de ressources.

13
Mat