Constantes
"Amigo, você sabia que em Java nem todas as variáveis podem ser alteradas?"
"Que tal, Kim? Na verdade, a própria palavra 'variável' fala de mudança."
"Não há dúvida disso. Como muitas outras linguagens de programação, Java possui constantes , ou seja, variáveis cujos valores não podem ser alterados . E a própria palavra 'constante' fala de constância."
"E para que servem?"
"Geralmente, 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 tornar qualquer variável uma constante, se ele decidir fazer isso assim é necessário."
"Você quer dizer como um nome, a cor de um carro ou o nome de um dia da semana?"
"Você tem a ideia certa. Qualquer coisa que não deva ser mudada."
"E como são essas constantes em Java?"
"Java tem uma palavra-chave especial para eles: 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;
"O que acontece se você criar uma constante e depois tentar atribuir um valor diferente a ela?"
"Essa é a pergunta certa a se fazer! E a resposta certa é esta: se você tentar atribuir um valor diferente a uma final
variável, seu programa simplesmente não compilará."
"E se você declarar uma final
variável, mas não atribuir um valor a ela?"
"Não adianta fazer isso, então também não é permitido em Java. Uma final
variável deve ser inicializada quando for declarada, ou seja, você deve atribuir um valor a ela. Há uma exceção a essa regra: você pode mover a inicialização de uma variável de classe estática em um construtor, mas você aprenderá sobre isso mais tarde.
"Dito isso, nem tudo o que existe final
é uma constante. Para reduzir o número de palavras-chave, os desenvolvedores Java usam a palavra para final
mais do que apenas declarar constantes . declarado como não pode ser herdado."final
final
final
"Uh... Substituído? Herdado? Que idioma você está falando agora?"
"A linguagem da programação orientada a objetos. Você aprenderá muito em breve. Até então, apenas aproveite a bela terminologia."
"Ok. Então, final
pode ser colocado antes de variáveis, classes e métodos, e essa palavra-chave os torna imutáveis em algum sentido?"
"Sim. Além disso, 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.
"Aqui está o importante a lembrar: final
antes de um nome de variável, é apenas uma proteção contra qualquer alteração nessa variável . Se uma variável armazena uma referência a um objeto, o objeto ainda pode ser alterado."
"Eu não entendo muito bem."
"Você vai entender muito em breve. Aqui está um exemplo:
|
Criamos uma matriz. Isso não é permitido: a data variável é declarada como final . Mas você pode fazer isso. E também isso. |
"Entendi. Isso é complicado."
Constantes globais
"O que você acha que são as constantes globais?"
"Eu acho que constantes globais são provavelmente como variáveis globais, apenas constantes?"
"Exatamente. Se você precisar declarar constantes globais em seu programa, crie variáveis de classe estáticas e torne-as public
e final
. Há um estilo especial para os nomes de tais variáveis: elas são escritas em letras maiúsculas, com um caractere de sublinhado usado para palavras separadas.
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;
}
sombreamento variável
"Como eu disse antes, você não pode criar múltiplas variáveis locais com os mesmos nomes em um único método. Em métodos diferentes, você pode."
"Eu sei que!"
"Mas o que você provavelmente não sabe é que variáveis em uma classe e variáveis locais em um método 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, ela sombreia (ou mascara ) a sum
variável de instância."
"Hmm... eu diria que, de certa forma, esse é o comportamento esperado."
"Mas isso não é o fim da história. Acontece que se uma variável de instância é 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 palavra-chave antes de seu this
nome :
this.name
"Aqui está um exemplo em que 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.
"Obviamente, vou precisar praticar isso."
"Você vai conseguir."
"E se uma variável de classe estática estiver sombreada em vez de apenas uma variável de instância (não estática)? Você não pode acessá-la por meio de this
?"
"Você está certo. A palavra-chave this não funcionará. Você precisa se referir a ela por meio do nome da classe:
ClassName.name
Exemplo:
Código | Visibilidade variável |
---|---|
|
|
"Atenção: 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 classe só é possível usando Solution
como prefixo.
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 — estou falando dentro de um for
loop ." Normalmente, um for
loop tem uma counter
variável 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?"
"Já ouvi algo sobre isso. Pelo que entendi, 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 ."
"Muito bem, Amigo. Mas ainda assim, dê uma olhada em um exemplo para reforçar este material:
Código | Visibilidade variável |
---|---|
|
|
"Então você está dizendo que no meu código eu poderia escrever vários loops um após o outro com uma variável de contador com o mesmo nome e não haverá problemas?"
"Não haveria problemas. Aqui, veja:
Código | Visibilidade variável |
---|---|
|
|
GO TO FULL VERSION