Java Comentários
Um comentário é um texto dentro do código que o Java ignora completamente. Ele existe só para pessoas: para explicar uma decisão, deixar um lembrete ou "desligar" uma linha sem apagá-la. O Java tem três tipos de comentário, e cada um tem o seu uso.
- O comentário de linha,
//. - O comentário de bloco,
/* … */, que pode ocupar várias linhas. - O comentário de documentação,
/** … */(Javadoc), só a ideia. - Como "comentar" código para desligá-lo, e a armadilha de um
/* */dentro de outro. - Por que
//dentro de aspas não é comentário. - A diferença entre um bom e um mau comentário.
A ideia: anotações na margem
Quando você estuda num livro, escreve a lápis na margem: "cai na prova", "ver o exemplo da página 30". As anotações ajudam você, mas não mudam o que o livro diz. Os comentários são as anotações do código: o javac pula tudo o que está num comentário, como se não existisse, e o programa funciona exatamente igual com ou sem eles.
Para quem são, então? Para a próxima pessoa que vai ler o código. E, muitas vezes, essa pessoa é você mesmo, daqui a seis meses, sem lembrar por que escreveu aquilo.
1. Comentário de linha: //
Duas barras começam um comentário que vai até o fim da linha. Ele pode ocupar a linha inteira ou ficar depois do código:
// Programa da Loja da Ana: mostra a lista de preços do dia
public class Main {
public static void main(String[] args) {
System.out.println("Loja da Ana"); // o título
System.out.println("Maçã: 3 reais");
// System.out.println("Promoção: tudo pela metade!");
System.out.println("Banana: 2 reais");
}
}
$ java Main.java Loja da Ana Maçã: 3 reais Banana: 2 reais « a linha da promoção não aparece: está comentada
- // Programa da Loja…
- Um comentário na linha inteira, antes da classe. É comum começar o arquivo dizendo o que ele faz.
- // o título
- Um comentário no fim da linha: o
printlnroda normalmente, e o Java ignora tudo a partir do//. - // System.out.println("Promoção…
- Uma instrução inteira dentro de um comentário: para o Java, ela não existe. Dizemos que a linha foi comentada.
Repare que o programa compila igual e a saída tem só três linhas. O // é o comentário mais usado no dia a dia.
Missão: a maçã acabou. Sem apagar nada, comente a linha da maçã para ela não aparecer na saída. Depois, descomente a linha da promoção (apague o // do começo dela) e rode de novo.
// Programa da Loja da Ana: mostra a lista de preços do dia
public class Main {
public static void main(String[] args) {
System.out.println("Loja da Ana"); // o título
System.out.println("Maçã: 3 reais");
// System.out.println("Promoção: tudo pela metade!");
System.out.println("Banana: 2 reais");
}
}
// Programa da Loja da Ana: mostra a lista de preços do dia
public class Main {
public static void main(String[] args) {
System.out.println("Loja da Ana"); // o título
// System.out.println("Maçã: 3 reais");
System.out.println("Promoção: tudo pela metade!");
System.out.println("Banana: 2 reais");
}
}
2. Comentário de bloco: /* … */
Começa com /* e termina com */. Tudo entre os dois é comentário, mesmo que ocupe muitas linhas. É bom para explicações mais longas:
public class Main {
public static void main(String[] args) {
/*
Total do pedido da Ana.
Os itens custam 10 reais e a entrega, 5.
Quando a loja tiver frete grátis, tirar o + 5.
*/
int total = 10 /* itens */ + 5;
System.out.println(total);
}
}
$ java Main.java 15
- /*
- Abre o comentário.
- Total do pedido…
- Várias linhas de texto livre. O recuo é só para ficar bonito.
- */
- Fecha o comentário. Tudo depois disso volta a ser código.
- 10 /* itens */ + 5
- Um comentário de bloco pode até ficar no meio de uma linha de código. O Java lê
10 + 5. Funciona, mas atrapalha a leitura; use pouco.
Muita gente escreve um * no começo de cada linha de dentro, por estética. O Java não exige:
/* * Total do pedido da Ana. * Os itens custam 10 reais e a entrega, 5. */
3. Comentário de documentação: /** … */
Um comentário que começa com dois asteriscos, /**, é especial: é um comentário de documentação, ou Javadoc. Ele fica logo antes de uma classe ou de um método e descreve o que ela faz, para quem vai usar o código:
/**
* Calcula a média de duas notas.
*
* @param a a primeira nota
* @param b a segunda nota
* @return a média das duas notas
*/
static double media(double a, double b) {
return (a + b) / 2;
}
Para o compilador, é um comentário comum: ignorado. Mas a ferramenta javadoc, que vem no JDK, lê esses comentários e gera páginas de documentação, como as da própria biblioteca do Java. As linhas com @ (como @param, "parâmetro", e @return, "devolve") são etiquetas que a ferramenta entende. As IDEs também mostram esse texto quando você passa o mouse sobre o nome do método.
Por enquanto, basta reconhecer o /** quando o vir. Como escrever e gerar a documentação é assunto da aula Javadoc; métodos como o media você vai criar em Métodos.
Os três tipos lado a lado
| Tipo | Como | Até onde vai | Para que |
|---|---|---|---|
| De linha | // texto | Fim da linha | Notas curtas; desligar uma linha. |
| De bloco | /* texto */ | Até o */ | Explicações longas; desligar um trecho. |
| De documentação | /** texto */ | Até o */ | Documentar classes e métodos para quem vai usá-los (javadoc). |
Comentar código para desligá-lo
Ao procurar um erro ou testar uma ideia, é comum "desligar" linhas sem apagá-las: coloca-se a linha num comentário. Isso se chama comentar o código; tirar o comentário é descomentar.
| Forma | Como | Quando usar |
|---|---|---|
// em cada linha | Coloque // no começo de cada linha | Uma ou poucas linhas. É a forma mais segura. |
| Atalho do editor | Selecione as linhas e tecle Ctrl+/ (no Mac, Cmd+/) no VS Code, IntelliJ e Eclipse | Várias linhas de uma vez; o mesmo atalho descomenta. |
/* … */ em volta | /* antes do trecho e */ depois | Um trecho grande, desde que ele não tenha outro /* */ dentro (veja abaixo). |
Comentar é ótimo para testar. Depois, decida: se a linha não serve mais, apague-a. Código comentado acumulado confunde quem lê ("isso ainda vale?"). Para guardar versões antigas, os programadores usam o Git, não comentários.
Quando dá errado
/* */ dentro de outro: illegal start of expression
O código abaixo tem um erro de propósito. A Ana quis desligar um trecho que já tinha um comentário de bloco dentro:
public class Main {
public static void main(String[] args) {
/* comentário de fora
/* comentário de dentro */
*/
System.out.println("Oi");
}
}
$ javac Main.java
Main.java:5: error: illegal start of expression
*/
^
Main.java:5: error: illegal start of expression
*/
^
2 errors
O que aconteceu: comentários de bloco não se aninham (não ficam um dentro do outro). O primeiro */ que aparece, o da linha 4, fecha o comentário inteiro; o /* da linha 4 era só texto dentro do comentário. Na linha 5, o */ que sobrou virou código: um * e uma / soltos, que não fazem sentido ali ("início ilegal de expressão").
Como resolver: para desligar código que tem /* */, use // em cada linha (ou o atalho Ctrl+/).
Missão: conserte o programa acima para ele compilar e mostrar Oi, mantendo os dois textos como comentário. Dica: troque o comentário de fora por // no começo de cada linha.
public class Main {
public static void main(String[] args) {
/* comentário de fora
/* comentário de dentro */
*/
System.out.println("Oi");
}
}
public class Main {
public static void main(String[] args) {
// comentário de fora
// /* comentário de dentro */
System.out.println("Oi");
}
}
// dentro de aspas não é comentário
public class Main {
public static void main(String[] args) {
System.out.println("Site: http://exemplo.com"); // o // dentro das aspas é texto
System.out.println("Não é /* comentário */");
}
}
$ java Main.java Site: http://exemplo.com Não é /* comentário */
O que aconteceu: nada de errado. Dentro de um texto entre aspas, // e /* */ são caracteres comuns e aparecem na tela. O comentário de verdade é o // que vem depois do ;, fora das aspas.
/*: unclosed comment
public class Main {
public static void main(String[] args) {
/* desligado
System.out.println("Oi");
}
}
$ javac Main.java
Main.java:3: error: unclosed comment
/* desligado
^
Main.java:7: error: reached end of file while parsing
2 errors
O que aconteceu: sem o */, o comentário vai até o fim do arquivo e "engole" o resto do programa, inclusive as chaves que fecham o método e a classe. Por isso vêm dois erros: "comentário não fechado" (na linha onde ele começou) e "o arquivo acabou" (as chaves sumiram dentro do comentário). Um editor de código pinta de cinza tudo o que é comentário: se metade do arquivo ficou cinza, falta um */.
Como resolver: feche o comentário com */ onde ele deve terminar.
Antes de procurar comentários, o Java traduz os códigos \u (que representam caracteres pelo número). \u000a é a quebra de linha. Por isso, nesta linha, o println roda, mesmo parecendo estar num comentário: // Comentário com \u000a System.out.println("surpresa");. O guia testou no JDK 25: aparece surpresa na tela. Você nunca vai precisar disso; é só para saber que a ordem das coisas no compilador importa.
Bons e maus comentários
Comentar muito não é comentar bem. O código já diz o que está sendo feito; o bom comentário diz por que.
| Mau comentário | Por quê | Melhor |
|---|---|---|
total = total + 5; // soma 5 ao total | Repete o código. Quem lê Java já sabe que é uma soma. | total = total + 5; // taxa de entrega fixa |
int x = 3; // quantidade de maçãs | Explica um nome ruim em vez de trocá-lo. | int macas = 3; (sem comentário) |
// desconto de 10% sobre uma linha que dá 15% | Comentário desatualizado mente; é pior que nenhum. | Atualize o comentário junto com o código, ou apague. |
| Vinte linhas de código antigo comentado | Ninguém sabe se ainda vale. | Apague; o Git guarda o histórico. |
Bons comentários costumam:
- explicar uma regra de negócio:
// lojas com mais de 3 anos não pagam a taxa; - avisar sobre algo não óbvio:
// a divisão é inteira de propósito: queremos caixas completas; - marcar o que falta fazer:
// TODO: aceitar pagamento em cartão(muitos editores listam todos osTODO, "a fazer"); - documentar classes e métodos com
/** */para quem vai usá-los.
Neste guia, os exemplos usam poucos comentários, porque cada linha já é explicada no texto da aula. Nos seus programas, comente o que você precisaria lembrar daqui a seis meses.
Missão: acrescente um comentário de linha útil no fim da linha int entrega = 5;, explicando o porquê (por exemplo, // taxa de entrega fixa). A saída não deve mudar.
public class Main {
public static void main(String[] args) {
int itens = 10;
int entrega = 5;
System.out.println("Total: " + (itens + entrega));
}
}
public class Main {
public static void main(String[] args) {
int itens = 10;
int entrega = 5; // taxa de entrega fixa
System.out.println("Total: " + (itens + entrega));
}
}
Exercícios
1. Comentário de linha
Complete para transformar esta linha num comentário:
2. Fechar o bloco
Complete com o que fecha um comentário de bloco:
3. Qual comentário é lido pela ferramenta javadoc para gerar documentação?
4. O que System.out.println("a // b"); mostra?
5. Qual é o melhor comentário para preco = preco * 0.9;?
6. Por que /* fora /* dentro */ */ dá erro?
Resumo
- Comentários são ignorados pelo compilador; servem a quem lê o código.
//comenta até o fim da linha;/* … */comenta um bloco, de qualquer tamanho./** … */é o comentário de documentação, lido pelojavadoc(veja Javadoc).- Comentar uma linha "desliga" o código sem apagar; prefira
//(ou Ctrl+/). /* */não se aninha: o primeiro*/fecha tudo.//e/*dentro de aspas são texto comum.- Bom comentário explica o porquê, não repete o código, e é atualizado junto com ele.