Variables locales

"¡Saludos, mi amado estudiante! Es hora de tomar un poco más en serio las variables. Pero esta vez no discutiremos 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 del código en el que se declara".

"Claramente, necesito un ejemplo".

"No hay problema. Aquí tienes:

Código Disponibilidad 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

"Repasemos las reglas para acceder a las variables locales una vez más. Aquí hay un bloque de código. ¿Qué marca su comienzo y final?"

"¿Brackets?"

"Correcto. Esto 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. Dígame, ¿dónde estará?" ¿Existe una variable si se declara en el cuerpo de un bucle?

"Solo existirá en el cuerpo del bucle".

"Así es. Además, se creará y destruirá en cada iteración del bucle".

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

"Hay una razón por la que eres mi favorito, Amigo. Toma un ejemplo más para solidificar esto en tu cerebro.

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 bsolo porque la primera bvariable no está visible en el bloque de código donde bse declara la segunda variable.

Parámetros

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

"Hmm... estoy perplejo..."

"Aquí todo es bastante simple. Los parámetros se crean cuando la ejecución entra en el método (es decir, cuando el código del método comienza a ejecutarse). Se eliminan cuando finaliza el método".

"En otras palabras, ¿son visibles en todo el cuerpo del método y solo allí?"

"Sí. 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 antes, 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.

Variables en una clase

"Recuerde las lecciones del Nivel 1, donde dijimos que una clase puede tener métodos y variables. Los métodos a veces se denominan métodos de instancia y variables, variables de instancia o campos.

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

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

"¿Y para qué están ahí?"

"Para empezar, se puede acceder a ellas 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 sumy count. Ambos métodos funcionan en variables de instancia compartidas".

"¡Lo entiendo todo! 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 siempre que ese objeto exista".

"Bien hecho, Amigo. Hemos sentado algunas bases y aprenderás detalles sobre los objetos de una clase en el siguiente nivel.

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.

"Todavía no tengo una comprensión clara de las variables estáticas".

"Oh, lo sé, pero no te preocupes. Por ahora, siéntete cómodo con ellos. Familiarízate con ellos. En el Nivel 11, analizaremos la estructura de las variables y métodos estáticos y comprenderás las razones de estos 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. Es por eso que existen incluso si no se ha creado un solo objeto de la clase . Puede consultar ellos de 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 county sumdentro de ella y las declaramos estáticas . Se puede acceder a las variables estáticas públicas desde cualquier método en un programa (y no solo desde un método)".

"No lo entiendo completamente, pero esto me parece conveniente".

"Así es. Y a veces es necesario. Sin variables y métodos estáticos estaríamos atascados".

"Con suerte, poco a poco podré resolverlo".

"Sí, por supuesto que lo harás".