1. Variables locales

Hablemos más seriamente sobre las variables. Pero esta vez no hablaremos de su estructura interna. En su lugar, nos centraremos en cómo las variables interactúan con el código donde se encuentran.

Todas las variables que se declaran dentro de los métodos se denominan variables locales . Una variable local existe solo en el bloque de código en el que se declara. O, para ser más precisos, existe desde el momento en que se declara hasta el final del bloque de código en el que se declara.

Para simplificar, consideremos un ejemplo:

Código Visibilidad variable
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

Hablemos de acceder a las variables locales una vez más. Aquí hay un bloque de código que consta de llaves: podría ser el cuerpo de un método, el cuerpo de un bucle o simplemente un bloque de código para una declaración condicional. Una variable declarada en un bloque de código existe hasta el final de ese bloque de código.

Si una variable se declara en el cuerpo del ciclo, entonces existirá solo en el cuerpo del ciclo. Se crea y se destruye en cada iteración del ciclo.

No puede declarar dos variables locales con el mismo nombre en un método: el programa no se compilará. Pero puede hacer esto si los bloques de código donde se declaran las variables no se superponen.

Ejemplo:

Código Visibilidad variable
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

Pudimos declarar una segunda variable local nombrada b solo porque la primera b variable no está visible en el bloque de código donde bse declara la segunda variable.


2. Parámetros

Como dijimos antes, cada método puede tener variables que llamamos parámetros. ¿Qué pasa con su visibilidad y vida útil?

Todo es sencillo. Los parámetros se crean cuando la ejecución avanza en el método (es decir, cuando el código del método comienza a ejecutarse). Se eliminan cuando finaliza el método. Son visibles en todo el cuerpo del método.

Ejemplo:

Código Visibilidad variable
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

Como dijimos anteriormente, argses solo una variable cuyo tipo es una matriz de cadenas. Y como todos los parámetros, está disponible en todas partes dentro del cuerpo del método. Dicho esto, generalmente lo ignoramos en nuestros ejemplos.



3. Variables en una clase

Recordará de las lecciones del Nivel 1 que una clase puede tener métodos y variables. Los métodos a veces se denominan métodos de instancia y variables, variables o campos de instancia. Estos son en realidad sinónimos en Java.

¿Qué son las variables (o campos) de una clase?

Son variables que no se declaran en un método, sino en una clase.

Se puede acceder a ellos desde cualquier método (no estático) de una clase. En términos generales, las variables de instancia son variables compartidas por todos los métodos de una clase.

Ejemplo:

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

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

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


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

En este ejemplo, tenemos dos métodos: add()y remove(). El add()método incrementa las variables de instancia sumy count, y el remove()método disminuye las variables sum y count. Ambos métodos funcionan en variables de instancia compartidas.

Las variables locales existen mientras se ejecuta un método. Las variables de instancia de una clase existen dentro de un objeto de una clase mientras exista ese objeto. Aprenderá detalles sobre los objetos de una clase en el siguiente nivel.


4. Variables estáticas

Al igual que los métodos, las variables de una clase pueden ser estáticas o no estáticas. Los métodos estáticos solo pueden acceder a variables estáticas.

En el Nivel 11, analizaremos la estructura de variables y métodos estáticos y comprenderá las razones de estas restricciones.

Para hacer una variable estática (variable de clase), debe escribir la staticpalabra clave en su declaración.

Las variables estáticas no están vinculadas a un objeto o instancia de la clase en la que se declaran. En cambio, pertenecen a la clase misma. Por eso existen aunque no se haya creado ni un solo objeto de la clase . Puede referirse a ellos desde otras clases usando una construcción como:

ClassName.variableName

Ejemplo:

Código Visibilidad variable
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

En el ejemplo anterior, creamos una Storageclase separada, movimos las variables count y sum dentro de ella y las declaramos static . Se puede acceder a las variables estáticas públicas desde cualquier método en un programa (y no solo desde un método).