2012-10-09 24 views
46

Siempre escribimos:Cómo declarar una constante en Java

public static final int A = 0; 

Pregunta:

  1. Es static final la única manera de declarar una constante en una clase?
  2. Si escribo public final int A = 0; lugar, es A siendo una constante o simplemente un campo ejemplo?
  3. ¿Qué es una variable de instancia ? ¿Cuál es la diferencia entre una variable de instancia y un campo ejemplo?
+0

Posible duplicado de [¿Cuál es la mejor manera de implementar constantes en Java?] (Https://stackoverflow.com/questions/66066/what-is-the-best-way-to-implement-constants-in- java) –

Respuesta

32
  1. puede utilizar un tipo enum en Java 5 y en adelante a los efectos que se han descrito. Es tipo seguro.
  2. A es una variable de instancia. (Si tiene el modificador estático, se convierte en una variable estática). Constantes solo significa que el valor no cambia.
  3. variables de instancia son miembros de datos pertenecientes al objeto y no a la clase. Instancia variable = Campo de instancia.

Si habla de la diferencia entre la variable de instancia y la variable de clase, existe una variable de instancia por objeto creado. Mientras que la variable de clase tiene solo una copia por cargador de clase, independientemente de la cantidad de objetos creados.

Java 5 y hasta enum tipo

public enum Color{ 
RED("Red"), GREEN("Green"); 

private Color(String color){ 
    this.color = color; 
    } 

    private String color; 

    public String getColor(){ 
    return this.color; 
    } 

    public String toString(){ 
    return this.color; 
    } 
} 

Si desea cambiar el valor de la enumeración que ha creado, proporcionan un método mutador.

public enum Color{ 
RED("Red"), GREEN("Green"); 

private Color(String color){ 
    this.color = color; 
    } 

    private String color; 

    public String getColor(){ 
    return this.color; 
    } 

    public void setColor(String color){ 
    this.color = color; 
    } 

    public String toString(){ 
    return this.color; 
    } 
} 

ejemplo de acceso:

public static void main(String args[]){ 
    System.out.println(Color.RED.getColor()); 

    // or 

    System.out.println(Color.GREEN); 
} 
+1

la segunda pregunta, ya que A no se puede cambiar, ¿sigue siendo una instancia ** variable **? –

+1

Sí, sigue siendo una variable de instancia. Existe uno por objeto creado. –

+0

Correcto, pero también podría hacer que sea una variable estática si no se puede cambiar :) –

3

Todo lo que es static está en el nivel de clase. No es necesario crear una instancia para acceder a los campos/métodos estáticos. La variable estática se creará una vez cuando se cargue la clase. Las variables de instancia son la variable asociada al objeto. Lo que significa que las variables de instancia se crean para cada objeto que creas. Todos los objetos tendrán una copia separada de la variable de instancia para ellos. En su caso, cuando se declaró como static final, esto es sólo una copia de la variable. Si lo cambia de una instancia múltiple, la misma variable se actualizará (sin embargo, tiene la variable final por lo que no se puede actualizar). En segundo caso, el final int a es también constante, sin embargo, se crea cada vez que se crea una instancia de la clase en la que se declara esa variable.

echar un vistazo a this Java tutorial para una mejor comprensión,

54

final significa que el valor no se puede cambiar después de la inicialización, que es lo que hace que sea una constante.static significa que en lugar de tener espacio asignado para el campo en cada objeto, solo se crea una instancia para la clase.

Por lo tanto, static final significa solo una instancia de la variable, sin importar cuántos objetos se creen y el valor de esa variable nunca podrá cambiar.

+0

No soy un experto en Java pero 'final' suena como" campo de solo lectura "y una" constante "debe ser constante en tiempo de compilación – fjch1997

+0

-1. Advertencia: No se puede usar un 'final int' en una instrucción' switch', lo que me lleva a creer que un 'final int' no es una constante en tiempo de compilación. – starbeamrainbowlabs

Cuestiones relacionadas