Variáveis ​​locais

"Saudações, meu querido aluno! É hora de levarmos as variáveis ​​um pouco mais a sério. Mas desta vez não vamos discutir sua estrutura interna. Em vez disso, vamos nos concentrar em como as variáveis ​​interagem com o código onde estão localizadas.

"Todas as variáveis ​​que são declaradas dentro de métodos são chamadas de variáveis ​​locais . Uma variável local existe apenas no bloco de código em que é declarada. Ou, para ser mais preciso, existe desde o momento em que é declarada até o final do bloco de código em que é declarado."

"Claramente, eu preciso de um exemplo."

"Sem problemas. Aqui está:

Código Disponibilidade variável
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

"Vamos repassar as regras para acessar variáveis ​​locais mais uma vez. Aqui está um bloco de código. O que marca seu início e fim?"

"Chaves?"

"Correto. Isso pode ser um corpo de método, o corpo de um loop ou apenas um bloco de código para uma instrução condicional. Uma variável declarada em um bloco de código existe até o final desse bloco de código. Diga-me, onde uma variável existe se for declarada no corpo de um loop?"

"Ele existirá apenas no corpo do loop."

"Isso mesmo. Além do mais, ele será criado e destruído a cada iteração do loop."

"Isso significa que você não pode declarar duas variáveis ​​locais com o mesmo nome em um método — o programa não irá compilar. Mas você pode fazer isso se os blocos de código onde as variáveis ​​são declaradas não se sobrepõem. "

"Há uma razão pela qual você é meu favorito, Amigo. Tome mais um exemplo para solidificar isso em seu cérebro.

Código Visibilidade variável
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

"Conseguimos declarar uma segunda variável local nomeada bapenas porque a primeira bvariável não está visível no bloco de código onde a segunda bvariável é declarada.

Parâmetros

"Como dissemos antes, cada método pode ter variáveis ​​que chamamos de parâmetros. E sua visibilidade e tempo de vida?"

"Hmm... estou perplexo..."

"Tudo é bastante simples aqui. Os parâmetros são criados quando a execução entra no método (ou seja, quando o código do método começa a ser executado). Eles são eliminados quando o método termina."

"Em outras palavras, eles são visíveis em todo o corpo do método e somente lá?"

"Sim. Exemplo:

Código Visibilidade variável
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 dissemos anteriormente, argsé apenas uma variável cujo tipo é um array de strings. E, como todos os parâmetros, está disponível em qualquer lugar dentro do corpo do método. Dito isso, normalmente a ignoramos em nossos exemplos.

Variáveis ​​em uma classe

"Lembre-se das lições do Nível 1, onde dissemos que uma classe pode ter métodos e variáveis. Os métodos às vezes são chamados de métodos de instância e variáveis ​​— variáveis ​​de instância ou campos.

"Quais são as variáveis ​​(ou campos) de uma classe ?

São variáveis ​​que são declaradas não em um método, mas em uma classe."

"E para que eles estão lá?"

"Para começar, elas podem ser acessadas de qualquer método (não estático) de uma classe. Grosso modo, variáveis ​​de instância são variáveis ​​que são compartilhadas por todos os métodos de uma classe.

Exemplo:

Código Visibilidade variável
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

"Neste exemplo, temos dois métodos — add()e remove(). O add()método incrementa as variáveis ​​de instância sume count, e o remove()método diminui as variáveis sum​​e count. Ambos os métodos funcionam em variáveis ​​de instância compartilhadas."

"Entendo tudo! Variáveis ​​locais existem enquanto um método está sendo executado. As variáveis ​​de instância de uma classe existem dentro de um objeto de uma classe enquanto esse objeto existir."

"Muito bem, amigo. Fizemos algumas bases e você aprenderá detalhes sobre os objetos de uma classe no próximo nível.

variáveis ​​estáticas

"Assim como os métodos, as variáveis ​​em uma classe podem ser estáticas ou não estáticas. Métodos estáticos só podem acessar variáveis ​​estáticas.

"Ainda não tenho uma compreensão clara das variáveis ​​estáticas."

"Ah, eu sei, mas não se preocupe. Por enquanto, fique confortável com eles. Familiarize-se com eles. No nível 11, analisaremos a estrutura de variáveis ​​e métodos estáticos e você entenderá os motivos para isso restrições.

"Para fazer uma variável estática (variável de classe), você deve escrever a staticpalavra-chave em sua declaração.

"As variáveis ​​estáticas não estão vinculadas a um objeto ou instância da classe na qual são declaradas. Em vez disso, elas pertencem à própria classe. É por isso que existem mesmo que nenhum objeto da classe tenha sido criado . Você pode consultar eles de outras classes usando uma construção como:

ClassName.variableName

Exemplo:

Código Visibilidade variável
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

"No exemplo acima, criamos uma Storageclasse separada, movemos as variáveis count​​e sumpara ela e as declaramos estáticas . Variáveis ​​estáticas públicas podem ser acessadas de qualquer método em um programa (e não apenas de um método)."

"Eu não entendo completamente, mas isso parece conveniente para mim."

"Assim é. E às vezes é necessário. Sem variáveis ​​e métodos estáticos estaríamos presos."

"Espero que eu lentamente seja capaz de descobrir isso."

"Sim, claro que você vai."