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 Piou 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 finalvariável, seu programa simplesmente não compilará."
"E se você declarar uma finalvariável, mas não atribuir um valor a ela?"
"Não adianta fazer isso, então também não é permitido em Java. Uma finalvariá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 finalmais do que apenas declarar constantes . declarado como não pode ser herdado."finalfinalfinal
"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, finalpode 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 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.
"Aqui está o importante a lembrar: finalantes 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 datavariá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 publice 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 addmétodo, declaramos uma variável local chamada sum. Até o final do método, ela sombreia (ou mascara ) a sumvariá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 thisnome :
this.name
"Aqui está um exemplo em que o conflito de nomes foi resolvido com sucesso:
| Código | Visibilidade variável |
|---|---|
|
|
As variáveis counte sumestão disponíveis em qualquer lugar com ou sem a thispalavra-chave. Nas linhas em que a sumvariável local acompanha a sumvariável de instância, a sumvariável de instância só pode ser acessada usando a thispalavra-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 counte sumestá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 à sumvariável de classe só é possível usando Solutioncomo prefixo.
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 — estou falando dentro de um forloop ." Normalmente, um forloop tem uma countervariá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 forloop é visível apenas no corpo do loop e no cabeçalho do forloop ."
"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