Escopo de Variável


Existem quatro escopos de variáveis: variáveis estáticas (que são criadas quando a classe é carregada, sobrevivendo enquanto a classe continuar carregada na JVM), variáveis de instância (que são criadas quando uma nova instância é criada, e duram até essa instância ser removida), variáveis locais (que permanecem enquanto o método que as contém estiver sendo executado) e variáveis de bloco (que permanecem enquanto o bloco estiver sendo executado).


import java.util.Date;

public class Escopo {
     
      //variável estática
      static int contador = 0;
      //variável de instância
      String nome = "";
     
      {
            //variável de bloco
            Date dtNasc = new Date();
      }
     
      void test() {
            //variável local
            String cpf = "000.000.000-00";
      }
     

}


A razão mais comum para ocorrer erro de escopo é quando uma variável é acessada fora do seu escopo. Abaixo três exemplos desse tipo de erro:

·         Acessar variáveis de instância a partir de métodos estáticos;

public class Erros {
     
      int cont;
     
      public static void main(String[] args) {
            /* Erro - não é possível acessar
             * variáveis de instância a partir
             * de métodos estáticos */
            x = 5;
      }

}

·         Acessar variáveis locais a partir de outro método;

public class Erros2 {
     
      void teste() {
            int x = 5;
            int y = 10;
            teste2();
      }
     
      void teste2() {
            /* Erro - um método não pode
             * acessar as variáveis locais
             * de outro método */
            x = 50;
      }

}

·         Utilizar uma variável de bloco depois que o código de bloco já foi executado.

public class Erros3 {
     
      void teste() {
            for (int i = 0; i < 10; i++) {
                  int cod = 1;
                  if (cod == 1)
                        cod++;                 
            }
            /* Erro - não é possível acessar uma
             * variável de bloco depois que o
             * bloco terminou a execução */
            System.out.println(cod);
      }

}



Fonte: SCJP Sun Certified Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário