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