Menu

Sintaxe de Java: classes, métodos, instruções e chaves

A forma de um programa Java: o método main, as instruções e os pontos e vírgulas, os blocos e as chaves, e as regras que o compilador exige antes mesmo de o seu código rodar.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

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 - com S maiúsculo. system.out.println(...) não compila.
  • String - com S maiú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.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR