1
resposta

[Dúvida] Escopo de declaração de Variável

Só confirmando, atualmente no 'Eclipse' a declaração de uma variável Booleana antes de um IF é global dentro das chaves do "public static void main(String[] args)", certo? É que depois o mesmo nome dentro das chaves dessa condicional dá aviso de palavra declarada duplicada.

A minha dúvida é, e que não aconteceu na vídeo aula que vi desse tema, isso agora é o padrão?

1 resposta

Fala Luciano, tudo certo?

O escopo de uma variável é um assunto que pode parecer um pouco confuso no início mas que fica cada vez mais claro com o tempo!

Uma variável pode ser vista dentro de seu escopo e de escopos mais internos, como assim?


public static void main(String args[]){
    int valorQualquer = 1;

    if(true){
        valorQualquer = 2;
    }

    {
        valorQualquer -= 1;
    }
    valorQualquer = 10;
}

Aqui temos 3 escopos: o do método main, onde a variável valorQualquer é declarada, o do bloco if, onde seu valor é alterado para dois, e de um bloco delimitado por chaves, que altera o valor da variável para 1, e finalmente dentro do método main o valor é alterado novamente, para 10.

Essa variável consegue ser visualizada em todos esses escopos por se tratar de uma variável de escopo maior, o método main envolve todos esses escopos. Uma variável pode ser acessada a partir do seu próprio escopo e de escopos internos a este!

No entanto, pode acontecer algo que chamamos de variável mais local, como assim? Vamos imaginar um código parecido com o anterior:


public static void main(String args[]){
    int valorQualquer = 1;

    if(true){
        int valorQualquer = 2;
    }

    {
        int valorQualquer -= 1;
    }
    valorQualquer = 10;
}

Nesse caso, note que dentro dos escopos delimitados por chaves estamos utilizando a palavra-chave int, para redeclarar a variável com o nome valorQualquer. Nesse caso, estamos criando uma variável local dentro desses escopos, que vai deixar de existir ao fim desse bloco. Nesse caso, qualquer alteração feita na nova variável declarada, não vai surtir nenhum efeito na declarada dentro do método main.

Então, uma variável pode ser enxergada dentro do seu escopo e de escopos mais internos de onde foi declarada, mas caso exista uma variável mais local de mesmo nome, ela que será utilizada dentro do bloco.

Em caso de dúvidas, estou à disposição.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!