1. Variáveis ​​locais

Vamos ter uma conversa mais séria sobre variáveis. Mas desta vez não discutiremos 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 é declarado até o final do bloco de código em que é declarado.

Para simplificar, vamos considerar um 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);
   }

}


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

Vamos falar sobre como acessar variáveis ​​locais mais uma vez. Aqui está um bloco de código que consiste em chaves: 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.

Se uma variável for declarada no corpo do loop, ela existirá apenas no corpo do loop. Ele é criado e destruído a cada iteração do loop.

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

Exemplo:

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 b apenas porque a primeira b variável não está visível no bloco de código onde a segunda bvariável é declarada.


2. Parâmetros

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

É tudo simples. 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. Eles são visíveis em todo o corpo do método.

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, geralmente o ignoramos em nossos exemplos.



3. Variáveis ​​em uma classe

Você se lembrará das lições do Nível 1 que uma classe pode ter métodos e variáveis. Às vezes, os métodos são chamados de métodos de instância e variáveis ​​— variáveis ​​de instância ou campos. Na verdade, esses são sinônimos em Java.

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.

Eles podem ser acessados ​​de qualquer método (não estático) de uma classe. Grosso modo, variáveis ​​de instância são variáveis ​​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 sumvariáveis count​​de instância e e o remove()método diminui as variáveis sum ​​e count. Ambos os métodos funcionam em variáveis ​​de instância compartilhadas.

As variáveis ​​locais existem enquanto um método está em execução. As variáveis ​​de instância de uma classe existem dentro de um objeto de uma classe enquanto esse objeto existir. Você aprenderá detalhes sobre os objetos de uma classe no próximo nível.


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

No Nível 11, analisaremos a estrutura de variáveis ​​e métodos estáticos e você entenderá os motivos dessas 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, eles pertencem à própria classe. É por isso que eles existem mesmo que nenhum objeto da classe tenha sido criado . Você pode se referir a 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 sum para ela e as declaramos static . Variáveis ​​estáticas públicas podem ser acessadas de qualquer método em um programa (e não apenas de um método).