Declarações de Variável



Existem dois tipos de variáveis em Java:
·         Variáveis primitivas: uma variável primitiva pode ser de oito tipos: char, boolean, byte, short, int, long, double ou float. Uma vez que uma variável primitiva tenha sido declarada, seu tipo primitivo nunca poderá mudar; embora seu valor possa na maioria das vezes;
·         Variáveis de referência: é usada para referenciar ou acessar um objeto. É declarada com um tipo específico que não pode ser mudado, mas pode ser usada para fazer referência a qualquer objeto do tipo declarado, ou de um subtipo do tipo declarado (um tipo compatível).

Declarando primitivos:

Variáveis primitivas podem ser declaradas como variáveis de classe (estáticas), variáveis de instância, parâmetros de métodos ou variáveis locais.
A seqüência dos tipos numéricos do menor para o maior é: byte, short, int e long; double é maior do que float.

Declarando variáveis de referência:

Podem ser declaradas como variáveis estáticas, variáveis de instância, parâmetros de métodos e variáveis locais.

Declarando variáveis de instância:

Variáveis de instância são definidas dentro de uma classe, mas fora de qualquer método, e só podem ser inicializadas quando a classe é instanciada. São campos que pertencem a cada objeto único, ou seja, cada instância da classe tem seus próprios valores para os campos ou variáveis de instância.
Regras para variáveis de instância:
·         Podem usar qualquer um dos quatro níveis de acesso;
·         Podem ser marcadas como final e transient;
·         Não podem ser marcadas como abstract, synchronized, strictfp, native e static (porque nesse caso se tornariam variáveis de classe).
Os modificadores de acesso funcionam em variáveis de instância da mesma forma que em métodos.

Variáveis locais:

Variáveis locais são declaradas dentro de um método, o que significa que são construídas quando o método é executado, e destruídas quando o método termina. Não podem usar a maioria dos modificadores, como: todos os modificadores de acesso, transient, volatile, abstract e static; o único que pode ser utilizando é o final.
Antes de uma variável local ser usada, ela deve ser inicializada, pois variáveis locais não recebem valor default; qualquer código que tentar utilizar uma variável local não inicializada o compilador não irá aceitar.
É possível declarar uma variável local com o mesmo nome de uma variável de instância; isso é chamado de sombreamento. Para resolver problemas de nomes de variáveis locais e de instância com a mesma identificação, basta utilizar a palavra-chave this seguida de ponto (.) antes de variáveis de instância.

public class Sombreamento {

      int cont = 1;
     
      public void setCont(int cont) {
            //não sabe a qual variável está referindo
            cont = cont;
            //por isso utiliza-se a notação abaixo
            this.cont = cont;
           
      }
     
}

Declarações de array:

Arrays são objetos que guardam múltiplas variáveis do mesmo tipo, ou variáveis que são subclasses do mesmo tipo; podem guardam tanto primitivos quanto objetos. São declarados indicando o tipo de elementos que irão usar (primitivo ou objeto), seguido por um par de colchetes que pode vir antes ou depois do nome do array.
Pode-se declarar também arrays multidimensionais, que são arrays de arrays; o conjunto de pares de colchetes pode aparecer antes ou depois do nome da matriz.
Não é permitido incluir o tamanho do array na sua declaração, pois isso deve ser feito na inicialização.

public class Arrays {
     
      /* é recomendado colocar os colchetes antes
       * do nome do array */
      int[] array;
     
      /* é permitido colocar os colchetes depois
       * do nome do array, mas é menos legível */
      Thread array2 [];
     
      String [][] matriz;
     
      /* também é permitida essa disposição dos
       * colchetes depois, mas é menos legível */
      String [] matriz2 [];

}

Variáveis final:

Declarar uma variável primitiva como final torna impossível reinicia-la com outro valor após ter recebido um valor explicitamente (valor não default). Entretanto, uma variável de referência (objeto) marcada como final não poderá jamais se referir a um objeto diferente, somente os dados dentro do objeto podem ser modificados. Isso quer dizer que não existe objetos final e sim referências de objetos final.

import java.util.Date;

public class Var_final {

      final int num = 10;
      final Date data = new Date();
     
      void teste() {
            /* erro, variável final não pode receber
             * um novo valor */
            num = 45;
            /* erro, objeto final não pode receber 
             * uma nova referência */
            data = new Date();
            /* mas pode ter os valores de seus campos
             * alterados */
            data.setYear(2008);  
      }

}

Variáveis transient:

Quando uma variável de instância é marcada por transient, significa que a máquina virtual irá ignorar esta variável quando tentar serializar o objeto que a contém.
A serialização permite salvar o estado de um objeto (em outras palavras, o valor das suas variáveis de instância) em um tipo especial de transmissão I/O; é possível salvar um objeto em um arquivo, ou enviá-lo para outra máquina virtual.

Variáveis volatile:

O modificador volatile diz a máquina virtual que uma thread acessando a variável deve sempre conciliar a sua própria cópia privada da variável com a cópia mestre em memória.
Assim como o modificador transient, volatile só ser aplicado a variáveis de instância.


Fonte: SCJP Sun Certifi ed Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário