Escopo Variável em Java
1. Visão geral
Em Java, como em qualquer linguagem de programação, cada variável tem um escopo. Este é o segmento do programa em que uma variável pode ser usada e é válida.
Neste tutorial, apresentaremos os escopos disponíveis em Java e discutiremos as diferenças entre eles.
2. Escopo da Classe
Cada variável declarada dentro dos colchetes de uma classe (\{}) com modificador de acessoprivate, mas fora de qualquer método, tem escopo de classe. Como resultado,these variables can be used everywhere in the class, but not outside of it:
public class ClassScopeExample {
private Integer amount = 0;
public void exampleMethod() {
amount++;
}
public void anotherExampleMethod() {
Integer anotherAmount = amount + 4;
}
}
Podemos ver queClassScopeExample tem uma variável de classeamount que pode ser acessada dentro dos métodos da classe.
Se não usarmosprivate, ele estará acessível a partir de todo o pacote. Verifiqueaccess modifiers article para obter informações adicionais.
3. Escopo do método
Quando uma variável é declarada dentro de um método, ela tem escopo de método e it will only be valid inside the same method:
public class MethodScopeExample {
public void methodA() {
Integer area = 2;
}
public void methodB() {
// compiler error, area cannot be resolved to a variable
area = area + 2;
}
}
EmmethodA, criamos uma variável de método chamadaarea. Por esse motivo, podemos usararea dentro demethodA, mas não podemos usá-lo em nenhum outro lugar.
4. Escopo do loop
Se declararmos uma variável dentro de um loop, ela terá um escopo de loop e will only be available inside the loop:
public class LoopScopeExample {
List listOfNames = Arrays.asList("Joe", "Susan", "Pattrick");
public void iterationOfNames() {
String allNames = "";
for (String name : listOfNames) {
allNames = allNames + " " + name;
}
// compiler error, name cannot be resolved to a variable
String lastNameUsed = name;
}
}
Podemos ver que o métodoiterationOfNames tem uma variável de método chamadaname. Essa variável pode ser usada apenas dentro do loop e não é válida fora dele.
5. Escopo do suporte
We can define additional scopes anywhere using brackets (\{}):
public class BracketScopeExample {
public void mathOperationExample() {
Integer sum = 0;
{
Integer number = 2;
sum = sum + number;
}
// compiler error, number cannot be solved as a variable
number++;
}
}
A variávelnumber só é válida entre colchetes.
6. Escopos e sombreamento variável
Imagine que temos uma variável de classe e queremos declarar uma variável de método com o mesmo nome:
public class NestedScopesExample {
String title = "example";
public void printTitle() {
System.out.println(title);
String title = "John Doe";
System.out.println(title);
}
}
Na primeira vez que estivermos imprimindotitle, ele imprimirá “exemplo”. Depois disso, declare uma variável de método com o mesmo nome e atribua a ela o valor “John Doe“.
A variável do método do título substitui a possibilidade de acessar a variávelclasstitle novamente. É por isso que, na segunda vez, ele imprimirá "John Doe“.
Confusing, right? This is called variable shadowinge não é uma boa prática. É melhor usar a ordem de prefixothis in para acessar a variável de classetitle, comothis.title.
7. Conclusão
Aprendemos os diferentes escopos que existem em Java.
Como sempre, o código está disponível emGitHub.