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 Pi
ou 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 final
variável, seu programa simplesmente não será compilado.
Uma final
variá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 final
para mais do que apenas declarar constantes. final
também pode se aplicar a métodos e até classes. Os métodos declarados como final
não podem ser substituídos e uma classe declarada como final
não pode ser herdada.
O final
modificador 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 final
antes 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 data variá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 public
and 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 add
método, declaramos uma variável local chamada sum
. Até o final do método, ele sombreia (ou mascara ) a sum
variá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 this
palavra-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 this
palavra-chave. Nas linhas em que a sum
variável local acompanha a sum
variável de instância, a sum
variável de instância só pode ser acessada usando a this
palavra-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 this
palavra-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 Solution
como prefixo. Nas linhas em que a sum
variável local acompanha a sum
variável de instância, o acesso à sum
variável de instância só é possível usando Solution
como prefixo.
3. Variáveis dentro de um for
loop
E mais um fato pequeno, mas interessante.
Há também um lugar onde uma variável é declarada de uma maneira especial — dentro de um for
loop .
Você deve se lembrar que um for
loop 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 for
loop é visível apenas no corpo do loop e no cabeçalho do for
loop .
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