Variáveis de Instância


Uma variável de instância é declarada dentro de uma classe, porém fora de um método ou construtor.
Quando se utiliza variáveis não inicializadas é possível ter comportamentos diferentes dependendo do tipo de variável ou array (primitivos ou objetos). O comportamento também depende do nível (escopo) em que a declaração ou a variável está.
Variáveis de instância são inicializadas com o valor default toda vez que uma nova instância da classe é criada, mesmo que depois elas recebam um valor explícito depois que o construtor do objeto tiver sido executado.

Variáveis de Instância do Tipo Primitivas

Variáveis inteiras recebem o valor default 0, pontos flutuante recebem o valor 0,0, boolean recebem false e char recebem \u000.
Quando uma classe que possui uma variável de instância do tipo primitiva é instanciada, essa variável recebe seu valor default, apesar de ser mais legível inicializar essa variável explicitamente. No entanto, mesmo essa variável recebendo apenas o valor default, uma exceção nunca será lançada ao tentar utiliza-la antes de receber outros valores.


public class Funcionario {
     
      int cod;
      double salario;
      boolean status;
     
      public static void main(String[] args) {
            Funcionario f = new Funcionario();
            //imprime o valor default 0
            System.out.println(f.cod);
            //imprime o valor default 0.0
            System.out.println(f.salario);
            //imprime o valor default false
            System.out.println(f.status);
      }

}


Variáveis de Instância do Tipo Objeto

Variáveis de instância do tipo objeto são inicializadas com null.
Quando uma classe que possui uma variável de instância do tipo objeto é instanciada, essa variável também recebe seu valor default, que é null. Isso significa que a variável não está apontando para um objeto no heap. Ou seja, no momento em que a classe tentar acessar qualquer coisa dessa variável, ocorrerá uma exceção em tempo de execução.
Nesse caso, é necessário que essa variável seja inicializada explicitamente, ou verificar antes de utilizar a variável se ela possui o valor null.

public class Carro {

      String nome;
     
      public String getNome() {
            return nome;
      }
      public void setNome(String nome) {
            this.nome = nome;
      }

      public static void main(String[] args) {
            Carro aluno = new Carro();
            /* quando o construtor de Aluno é
             * invocado as variáveis recebem o
             * valor default */
            String n = aluno.getNome();
            System.out.println(n); //imprime null
            /* compila mas lança exceção, porque
             * a variável nome de Aluno possui o
             * valor default null, que foi atribuído
             * a variável n */
            n.toLowerCase();
            /* deve-se testar se a referência é null
             * antes de usá-la */
            if (n != null)
                  n.toLowerCase();
      }
     
}


Variáveis de Instância do Tipo Array

Um array é um objeto, isso significa que se estiver declarado como variável de instância e não for inicializado, receberá o valor null.
Porém, se este array estiver inicializado, todos os seus elementos receberão seus valores default. Isso quer dizer que se houver um array com elementos do tipo objeto, ao ser inicializado esses objetos receberão o valor null (default); caso o array possua elementos de um tipo primitivo, ao ser inicializado esses elementos receberão seus valores default.
Obs.: os elementos de um array sempre receberão seus valores default quando este for inicializado, independentemente se esse array esteja declarado como variável de instância como variável local, por exemplo.


public class Veiculos {
     
      static Carro[] carros = new Carro[5];
      static int[] codigos = new int[5];
     
      public static void main(String[] args) {
            /* ao instanciar um array seus elementos
             * recebem seus valores default */
            for (int i = 0; i < carros.length; i++)
                  System.out.println(carros[i]);//null
            for (int i = 0; i < codigos.length; i++)
                  System.out.println(codigos[i]); //0
      }

}


Fonte: SCJP Sun Certified Programmer for Java 6 Study Guide

1 comentários:

wendel disse...

Kamilla, me responda uma coisa!! Se a String nome não está como private por usar o método get e set?? Eu ainda estou confuso sobre a necessidade desses métodos

Postar um comentário