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 Pio 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 finalvariable, entonces su programa simplemente no se compilará.

Una finalvariable 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 finalpara algo más que declarar constantes. finaltambién puede aplicarse a métodos e incluso clases. Los métodos declarados como finalno se pueden anular y una clase declarada como finalno se puede heredar.

El finalmodificador 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 finalantes 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:

final int[] data = {1, 2, 3, 4, 5, 6};

data = {6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
Creamos una matriz.

Esto no está permitido: la datavariable 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 publicen 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
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     int sum = data * 2;
     count++;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum, data
count, sum

En el addmétodo, declaramos una variable local llamada sum. Hasta el final del método, sombrea (o enmascara ) la sumvariable 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 thispalabra clave antes de su nombre:

this.name

Aquí hay un ejemplo donde el conflicto de nombres se resuelve con éxito:

Código Visibilidad variable
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

Las variables count y sum están disponibles en todas partes con o sin la thispalabra clave. En las líneas donde la sum variable local sombrea la sumvariable de instancia, sum solo se puede acceder a la variable de instancia usando la thispalabra 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 thispalabra clave:

ClassName.name

Ejemplo:

Código Visibilidad variable
public class Solution
{
   public static int count = 0;
   public static int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

Puede acceder a las variables estáticas count y sum en todas partes con o sin usar el nombre de la clase Solutioncomo prefijo. En aquellas líneas donde la sumvariable local sombrea la sumvariable de instancia, el acceso a la sum variable de instancia solo es posible cuando se usa Solutioncomo prefijo.



3. Variables dentro de un forciclo

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 forbucle .

Puede recordar que un forbucle 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 forciclo es visible solo en el cuerpo del ciclo y en el encabezado del forciclo .

Ejemplo:

Código Visibilidad variable
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

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
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a