Como é um programa Java
Na página anterior você colocou o Java para rodar. Agora vamos ver do que o código em si é realmente feito. O Java é rígido e explícito: há uma forma fixa que todo programa precisa seguir, e o compilador verifica essa forma antes de uma única linha ser executada.
Aqui está o menor programa Java completo possível. Execute-o:
São muitas palavras para imprimir uma única linha e, ao contrário de Python ou JavaScript, você não pode pular nenhuma. Cada pedaço é obrigatório, então vale a pena entender o que cada um faz. Vamos desmontá-lo de fora para dentro.
Tudo vive dentro de uma classe
O Java não tem código "solto" flutuando no nível superior de um arquivo. Todo o código vive dentro de uma classe, declarada com a palavra-chave class e um nome:
public class Main {
// everything goes in here
}
A { de abertura e a } de fechamento correspondente delimitam o corpo da classe. O nome Main é você quem escolhe, com uma regra importante: em um arquivo .java normal, uma classe public precisa corresponder exatamente ao nome do arquivo. Uma public class Main pertence a Main.java. Erre nas maiúsculas e o compilador se recusa a compilá-lo.
Você vai aprender o que as classes realmente são no capítulo de Classes. Por enquanto, trate public class Main { ... } como o invólucro obrigatório em volta do seu código.
O método main é a linha de largada
Quando você executa um programa Java, o ambiente de execução procura um método específico para começar a execução:
public static void main(String[] args) {
// your code starts here
}
Essa assinatura não é negociável. Cada palavra cumpre um papel:
public- o ambiente de execução consegue alcançá-lo de fora da classe.static- ele roda sem criar antes um objeto da classe.void- ele não devolve nada quando termina.main- o nome exato que o ambiente de execução procura.String[] args- um array com os argumentos da linha de comando passados ao programa.
Se até uma única palavra estiver errada (Static em vez de static, String args em vez de String[] args), seu código pode até continuar compilando, mas ao iniciá-lo ele falha com Error: Main method not found in class Main. Essa mensagem quase sempre significa que há um erro de digitação nesta linha.
As instruções terminam com ponto e vírgula
Uma instrução é uma ordem completa. Em Java, toda instrução termina com ponto e vírgula ;. O compilador usa o ponto e vírgula para saber onde uma ordem termina e a próxima começa: as quebras de linha não importam para ele.
Como as quebras de linha são ignoradas, as três instruções poderiam ficar em uma única linha e ainda funcionar, embora ninguém escreva Java assim:
int score = 90; score = score + 5; System.out.println(score);
Esqueça um ponto e vírgula e o compilador te interrompe antes de o programa rodar:
int score = 90
System.out.println(score);
error: ';' expected
int score = 90
^
Um ponto e vírgula faltando é o erro de compilação mais comum que você vai encontrar como iniciante. Quando o compilador aponta uma linha, verifique também a linha acima dela: é ali que costuma estar a omissão de verdade.
Blocos e chaves
As chaves { } agrupam instruções em um bloco. O corpo de uma classe é um bloco, o corpo de um método é um bloco, e o corpo de um if ou de um laço é um bloco. Blocos podem ser aninhados dentro de outros blocos:
Note a diferença em relação às instruções: uma linha que abre um bloco termina com {, não com ponto e vírgula, e você não coloca ponto e vírgula depois da } de fechamento de um método, classe, if ou laço. Confundir isso é um erro inicial clássico:
public static void main(String[] args) {
System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)
A indentação dos exemplos é puramente para humanos. O Java a ignora, mas uma indentação consistente é como você e todos os outros mantêm o controle de qual { corresponde a qual }. Deixe seu editor indentar automaticamente e as chaves vão se alinhar por você.
Java diferencia maiúsculas de minúsculas
O Java trata maiúsculas e minúsculas como coisas completamente diferentes. score, Score e SCORE são três nomes separados. O mesmo vale para as palavras-chave e os nomes embutidos:
Se você escrevesse system.out.println (com s minúsculo) ou String Name e depois tentasse usar name, o compilador rejeitaria. Alguns nomes que os iniciantes erram com frequência nas maiúsculas:
System- comSmaiúsculo.system.out.println(...)não compila.String- comSmaiúsculo. É uma classe, ao contrário dos tipos primitivos em minúsculas.void,int,public,static- todos em minúsculas. São palavras-chave.
A maioria dos erros "cannot find symbol" tem origem em um deslize de maiúsculas. O próprio erro te diz qual símbolo ele não conseguiu encontrar: compare as maiúsculas dele com o que você digitou.
Juntando as peças
Aqui está um programa um pouco maior que usa tudo desta página: uma classe, o método main, várias instruções, um bloco aninhado e o uso consistente de maiúsculas:
Leia de cima para baixo: a classe envolve tudo, main é onde a execução começa, cada ordem termina em ;, o corpo do if está agrupado em seu próprio bloco e todos os nomes embutidos estão escritos com as maiúsculas corretas. Esse é o esqueleto de basicamente todo programa Java que você vai escrever.
Próximo: Comentários
Agora você sabe ler a estrutura de um arquivo Java. A próxima coisa a acrescentar são notas para humanos: texto que o compilador ignora por completo. A próxima página cobre os comentários: a forma de uma única linha //, a forma de bloco /* */ e quando um comentário de fato merece seu lugar no código.
Perguntas frequentes
Qual é a sintaxe básica de um programa Java?
Todo programa Java vive dentro de uma classe, e a execução começa em um método com a assinatura exata public static void main(String[] args). As instruções terminam com ponto e vírgula, e os blocos de código são agrupados com chaves { }. Um programa mínimo é public class Main { public static void main(String[] args) { System.out.println("Hi"); } }.
Por que o Java precisa de public static void main(String[] args)?
Esse é exatamente o ponto de entrada que o ambiente de execução do Java procura. public permite que o ambiente o chame de fora, static significa que ele roda sem criar um objeto antes, void significa que ele não retorna nada e String[] args recebe os argumentos da linha de comando. Mude qualquer palavra (até as maiúsculas) e o programa compila, mas não inicia, com Error: Main method not found.
Todas as instruções em Java precisam de ponto e vírgula?
Toda instrução termina com ponto e vírgula: declarações de variáveis, atribuições, chamadas de método. Mas as linhas que terminam em um bloco (if, for, while, o cabeçalho de uma classe ou método) terminam com { no lugar, e você não coloca ponto e vírgula depois da } de fechamento desses blocos. Esquecer um ponto e vírgula é o erro de compilação mais comum entre iniciantes em Java.