Mostrando postagens com marcador Declarações de Variável. Mostrar todas as postagens
Mostrando postagens com marcador Declarações de Variável. Mostrar todas as postagens

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