2011-11-11 10 views
21

¿Por qué las constantes de Java se declaran estáticas?¿por qué las constantes de Java se declaran estáticas?

class Foo{ 
    static final int FII = 2 ; 
} 

En esto entiendo el uso de la final? Compre por qué tiene que ser estático? ¿Por qué debería ser una variable de clase y no una variable de instancia?

+8

¿Por qué quieres que más de una instancia tenga su propia copia de 'FII'? –

+1

Puedo declarar 'final int FII = 2;' bien. –

+0

@JonLin: Puedes, pero no deberías, ya que no agrega valor pero solo aumenta el uso de la memoria. La excepción sería la inicialización de la constante en la llamada del constructor, entonces cada instancia podría tener su propio valor constante (constante después de la ejecución del constructor) y podría tener un valor como 'tiempo de construcción' o similar. –

Respuesta

26

Si puede variar según la instancia de una clase, entonces claramente no es una constante. ¿Qué significa obtener un valor diferente de pi para cada instancia de Math (no es que Math incluso permita la creación de instancias)? ¿O un orden diferente insensible a mayúsculas/minúsculas para cada instancia de String?

12

Es simplemente para que pueda acceder a ellos sin una instancia de esa clase.

Exigir que se cree una instancia solo para acceder a los campos constantes es un desperdicio de recursos.

76

Si una constante no es estática, Java asignará una memoria para esa constante en cada objeto de la clase (es decir, una copia de la constante por objeto).

Si una constante es estática, solo habrá una copia de la constante para esa clase (es decir, una copia por clase).

Por lo tanto, si la constante tiene solo un valor, debe declararse estático.

Si la constante puede tener un valor diferente para cada objeto, por ejemplo, el tiempo de creación del objeto, no debe declararse como estático.

+4

Muy buena y técnica respuesta, muchas gracias. –

Cuestiones relacionadas