O que é uma variável
Uma variável é uma caixa com nome que guarda um valor. Em Java toda variável tem um tipo fixo - decidido quando você a declara - e esse tipo nunca muda. É isso que torna Java uma linguagem de tipagem estática: o compilador conhece o tipo de cada variável antes de o programa rodar, e se recusará a compilar código que coloque um valor do tipo errado em uma caixa.
Uma declaração tem três partes: o tipo, o nome e (geralmente) um valor inicial.
Leia int age = 30; como "crie um int chamado age e coloque 30 nele". O ponto e vírgula encerra a instrução, exatamente como a página de comentários mostrou que toda instrução faz.
Declarar agora, atribuir depois
Você pode separar uma declaração de sua primeira atribuição. O tipo aparece uma única vez, na declaração; depois disso você atribui usando apenas o nome e =:
Uma regra que pega os iniciantes de surpresa: você precisa atribuir um valor a uma variável local antes de lê-la. O compilador controla isso e rejeita código que lê uma variável local não inicializada:
int score;
System.out.println(score); // compile error: variable score might not have been initialized
Isso é um recurso, não um aborrecimento - ele captura uma classe inteira de erros antes mesmo de o programa rodar.
Regras e convenções de nomenclatura
Java impõe algumas regras rígidas e, sobre elas, adiciona convenções. As regras: um nome pode conter letras, dígitos, _ e $, mas não pode começar com um dígito, não pode ser uma palavra reservada (como int ou class) e diferencia maiúsculas de minúsculas (age e Age são duas variáveis diferentes).
As convenções que todo mundo segue:
- Variáveis e métodos usam
camelCase:firstName,totalScore. - Constantes usam
UPPER_SNAKE_CASE:MAX_USERS. - Os nomes devem descrever o valor:
count, nãoc;userEmail, nãox.
Nomes claros não são enfeite - são a forma como o seu eu do futuro lê o código. totalPrice = itemCount * pricePerItem é autoexplicativo de um jeito que t = c * p nunca será.
Segurança de tipos: a caixa mantém o seu tipo
Como o tipo é travado na declaração, você não pode jogar um valor do tipo errado em uma variável. Isso captura os erros em tempo de compilação:
int age = 30;
age = "thirty"; // compile error: incompatible types - String cannot become int
Atribuir entre tipos numéricos segue as regras de ampliação (widening) - um tipo menor flui automaticamente para um maior, mas não o contrário. Vamos cobrir isso em detalhe nas páginas de tipos de dados e conversão de tipos; por enquanto, basta saber que o compilador está de olho.
A palavra-chave var
Desde o Java 10 você pode escrever var no lugar do tipo e deixar o compilador inferi-lo a partir do valor à direita:
var não é tipagem dinâmica - name é tão String quanto se você tivesse escrito String name, e você continua não podendo atribuir um int a ele mais tarde. Ele só economiza digitação. O detalhe: var precisa de um inicializador para inferir o tipo, então var x; é ilegal, e ele só funciona com variáveis locais - nunca com campos, parâmetros de método ou tipos de retorno. Use-o quando o tipo for óbvio pelo lado direito; escreva o tipo por extenso quando isso trouxer mais clareza.
Constantes com final
Quando um valor nunca deve mudar depois de definido, marque-o como final. Qualquer tentativa de reatribuí-lo vira um erro de compilação:
final comunica a intenção ("este é um valor fixo") e deixa o compilador protegê-lo por você. Recorra a ele sempre que um valor for conceitualmente uma constante - taxas, limites, chaves de configuração - para que uma reatribuição acidental seja capturada em vez de seguir silenciosamente como um bug.
Escopo das variáveis
Uma variável existe apenas dentro do bloco - o { ... } - onde é declarada, e morre na chave de fechamento. Isso é o seu escopo. Uma variável declarada dentro de um laço ou de um bloco if é invisível fora dele:
Tanto i quanto square pertencem ao laço e somem quando ele termina; total é declarada no bloco externo, então sobrevive. A lição prática: declare cada variável no menor bloco que precisa dela. Um escopo restrito significa menos nomes competindo pela sua atenção e menos chances de usar mal um valor longe de onde ele foi definido.
Próximo: tipos de dados
Cada variável desta página começou com um tipo - int, double, String, boolean. A próxima página detalha os tipos de dados de Java: os oito primitivos, o tamanho de cada um, a diferença entre primitivos e objetos, e qual tipo escolher em cada situação.
Perguntas frequentes
Como se declara uma variável em Java?
Escreva o tipo, depois um nome e, opcionalmente, atribua um valor: int age = 30;. O tipo (int) é fixo durante toda a vida da variável; o nome (age) é como você se refere a ela. Você pode dividir isso em uma declaração e uma atribuição posterior - int age; age = 30; -, mas precisa atribuir um valor antes de ler uma variável local.
O que é a palavra-chave var em Java?
Desde o Java 10, var permite que o compilador infira o tipo de uma variável local a partir do valor que você atribui: var name = "Ada"; faz de name um String. Continua sendo tipagem estática - o tipo é fixado em tempo de compilação, não é dinâmico. var só funciona com variáveis locais que tenham um inicializador, nunca com campos, parâmetros ou declarações sem inicialização.
Como se cria uma constante em Java?
Adicione a palavra-chave final: final double PI = 3.14159;. Depois de atribuída, uma variável final não pode ser reatribuída - o compilador rejeita qualquer tentativa. Por convenção, as constantes são escritas em UPPER_SNAKE_CASE para se destacarem das variáveis comuns.