Escopo Variável em Java

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.