1. Constantes
Muchos otros lenguajes de programación tienen constantes , es decir, variables cuyos valores no se pueden cambiar . Por lo general, se utilizan para algún tipo de cosa fundamental como el número Pi
o la cantidad de días en los meses del año. Dicho esto, en principio, un programador puede convertir cualquier variable en una constante, si decide que es necesario hacerlo.
Entonces, ¿cómo se declara una variable inmutable (constante) en Java? Hay una palabra clave especial para esto: final
. Crear una variable inmutable tiene el mismo aspecto que crear una ordinaria. La única diferencia es que antes del tipo de variable necesitas escribir la palabra final
, así:
final Type name = value;
Si intenta asignar un valor diferente a una final
variable, entonces su programa simplemente no se compilará.
Una final
variable debe inicializarse (se le debe asignar un valor) cuando se declara. Hay una excepción a esta regla: puede mover la inicialización de una variable de clase estática a un constructor. Pero aprenderá sobre esto en el Nivel 10 .
Para reducir el número de palabras clave, los desarrolladores de Java usan la palabra final
para algo más que declarar constantes. final
también puede aplicarse a métodos e incluso clases. Los métodos declarados como final
no se pueden anular y una clase declarada como final
no se puede heredar.
El final
modificador se puede agregar antes de cualquier variable: variables locales, parámetros de método, campos de clase y variables de clase estática.
Tenga en cuenta que final
antes de un nombre de variable es solo una protección contra cualquier cambio en esa variable . Si una variable almacena una referencia a un objeto, el objeto aún se puede cambiar.
Ejemplo:
|
Creamos una matriz. Esto no está permitido: la data variable se declara como final . Pero puedes hacer esto. Y también esto. |
constantes globales
Si decide declarar constantes globales en su programa, entonces necesita crear variables de clase estáticas y convertirlas public
en final
. Hay un estilo especial para los nombres de tales variables: se escriben en mayúsculas, con un carácter de subrayado que se usa para separar las palabras.
Ejemplos:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Sombreado variable
Como dijimos antes, no puedes crear varias variables locales con el mismo nombre en el mismo método. En diferentes métodos, usted puede.
Pero esto es lo que probablemente no sepa: las variables de instancia y las variables de método local pueden tener el mismo nombre.
Ejemplo:
Código | Visibilidad variable |
---|---|
|
|
En el add
método, declaramos una variable local llamada sum
. Hasta el final del método, sombrea (o enmascara ) la sum
variable de instancia.
Está bien, dices, eso es de esperarse en algún sentido. Pero ese no es el final de la historia. Resulta que si una variable local oculta una variable de instancia, todavía hay una manera de referirse a la variable de instancia dentro del método. Hacemos esto escribiendo la this
palabra clave antes de su nombre:
this.name
Aquí hay un ejemplo donde el conflicto de nombres se resuelve con éxito:
Código | Visibilidad variable |
---|---|
|
|
Las variables count
y sum
están disponibles en todas partes con o sin la this
palabra clave. En las líneas donde la sum
variable local sombrea la sum
variable de instancia, sum
solo se puede acceder a la variable de instancia usando la this
palabra clave.
Si se sombrea una variable de clase estática en lugar de una variable de instancia, entonces debe acceder a ella a través del nombre de clase en lugar de la this
palabra clave:
ClassName.name
Ejemplo:
Código | Visibilidad variable |
---|---|
|
|
Puede acceder a las variables estáticas count
y sum
en todas partes con o sin usar el nombre de la clase Solution
como prefijo. En aquellas líneas donde la sum
variable local sombrea la sum
variable de instancia, el acceso a la sum
variable de instancia solo es posible cuando se usa Solution
como prefijo.
3. Variables dentro de un for
ciclo
Y un hecho más pequeño pero interesante.
También hay un lugar donde se declara una variable de una manera especial: dentro de un for
bucle .
Puede recordar que un for
bucle normalmente tiene una variable de contador entre paréntesis. ¿Y cuál será la visibilidad de esta variable? Después de todo, no está en el cuerpo del ciclo. ¿Es todo el método? ¿O no?
La respuesta correcta es: una variable declarada en el encabezado de un for
ciclo es visible solo en el cuerpo del ciclo y en el encabezado del for
ciclo .
Ejemplo:
Código | Visibilidad variable |
---|---|
|
|
Por lo tanto, siempre puede escribir bucles uno tras otro en su código y usar variables de contador con el mismo nombre, eso no creará ningún problema.
Ejemplo:
Código | Visibilidad variable |
---|---|
|
|
GO TO FULL VERSION