1. Constantes
Muitas outras linguagens de programação possuem constantes , ou seja, variáveis cujos valores não podem ser alterados . Normalmente, eles são usados para algum tipo de coisa fundamental, como o número Piou o número de dias nos meses do ano. Dito isso, em princípio, um programador pode transformar qualquer variável em uma constante, se decidir que isso é necessário.
Então, como você declara uma variável imutável (constante) em Java? Existe uma palavra-chave especial para isso: final. Criar uma variável imutável parece o mesmo que criar uma comum. A única diferença é que antes do tipo da variável você precisa escrever a palavra final, assim:
final Type name = value;
Se você tentar atribuir um valor diferente a uma finalvariável, seu programa simplesmente não será compilado.
Uma finalvariável deve ser inicializada (um valor deve ser atribuído a ela) quando é declarada. Há uma exceção a essa regra: você pode mover a inicialização de uma variável de classe estática para um construtor. Mas você aprenderá sobre isso no Nível 10 .
Para reduzir o número de palavras-chave, os desenvolvedores Java usam a palavra finalpara mais do que apenas declarar constantes. finaltambém pode se aplicar a métodos e até classes. Os métodos declarados como finalnão podem ser substituídos e uma classe declarada como finalnão pode ser herdada.
O finalmodificador pode ser adicionado antes de quaisquer variáveis: variáveis locais, parâmetros de método, campos de classe e variáveis de classe estáticas.
Observe que finalantes de um nome de variável é apenas uma proteção contra quaisquer alterações nessa variável . Se uma variável armazena uma referência a um objeto, o objeto ainda pode ser alterado.
Exemplo:
|
Criamos uma matriz. Isso não é permitido: a datavariável é declarada como final. Mas você pode fazer isso. E também isso. |
Constantes globais
Se você decidir declarar constantes globais em seu programa, precisará criar variáveis de classe estáticas e torná-las publicand final. Existe um estilo especial para os nomes dessas variáveis: elas são escritas em letras maiúsculas, com um caractere de sublinhado usado para separar as palavras.
Exemplos:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Sombreamento variável
Como dissemos antes, você não pode criar várias variáveis locais com o mesmo nome no mesmo método. Em diferentes métodos, você pode.
Mas aqui está o que você provavelmente não sabe: variáveis de instância e variáveis de método local podem ter o mesmo nome.
Exemplo:
| Código | Visibilidade variável |
|---|---|
|
|
No addmétodo, declaramos uma variável local chamada sum. Até o final do método, ele sombreia (ou mascara ) a sumvariável de instância.
Ok, você diz, isso é de se esperar em algum sentido. Mas isso não é o fim da história. Acontece que se uma variável de instância for sombreada por uma variável local, ainda há uma maneira de se referir à variável de instância dentro do método. Fazemos isso escrevendo a thispalavra-chave antes de seu nome:
this.name
Aqui está um exemplo onde o conflito de nomes foi resolvido com sucesso:
| Código | Visibilidade variável |
|---|---|
|
|
As variáveis count e sum estão disponíveis em qualquer lugar com ou sem a thispalavra-chave. Nas linhas em que a sum variável local acompanha a sumvariável de instância, a sum variável de instância só pode ser acessada usando a thispalavra-chave.
Se uma variável de classe estática em vez de uma variável de instância estiver sombreada, você precisará acessá-la por meio do nome da classe em vez da thispalavra-chave:
ClassName.name
Exemplo:
| Código | Visibilidade variável |
|---|---|
|
|
Você pode acessar as variáveis count e sum estáticas em qualquer lugar com ou sem usar o nome da classe Solutioncomo prefixo. Nas linhas em que a sumvariável local acompanha a sumvariável de instância, o acesso à sum variável de instância só é possível usando Solutioncomo prefixo.
3. Variáveis dentro de um forloop
E mais um fato pequeno, mas interessante.
Há também um lugar onde uma variável é declarada de uma maneira especial — dentro de um forloop .
Você deve se lembrar que um forloop normalmente tem uma variável de contador entre parênteses. E qual será a visibilidade dessa variável? Afinal, não está no corpo do loop. É todo o método? Ou não?
A resposta correta é: uma variável declarada no cabeçalho de um forloop é visível apenas no corpo do loop e no cabeçalho do forloop .
Exemplo:
| Código | Visibilidade variável |
|---|---|
|
|
Portanto, você sempre pode escrever loops um após o outro em seu código e usar variáveis de contador com o mesmo nome — isso não criará nenhum problema.
Exemplo:
| Código | Visibilidade variável |
|---|---|
|
|
GO TO FULL VERSION