Método main em Java

Estou estudando para a certificação da Oracle e preciso saber todas as restrições do método main. Então vamos implementá-lo ora bolas:

public static void main(String[] args){
     System.out.println("executando código");
}

Rodando a minha aplicação:

> executando código

Ótimo, mas eu sempre terei que escrever o método main da mesma maneira? Será que não da pra modificar alguma coisa? Vamos tentar executar sem o modificador de acesso public:

static void main(String[] args){
     System.out.println("executando codigo");
}

Executando o código:

Erro: o método main não foi encontrado na classe Main; defina o método main como:
   public static void main(String[] args)

Parece que não deu muito certo, ele não consegue achar o main… Vamos tentar agora sem o static:

public void main(String[] args){
     System.out.println("executando codigo");
}

Testando mais uma vez:

Erro: o método main não é static na classe Main; defina o método main como:
   public static void main(String[] args)

Xi, tem que ser static também…
Bom e o void? Vamos ver se eu consigo retornar um int:

public static int main(String[] args){
     System.out.println("executando codigo");
     return 1;
}

Verificando novamente:

Erro: o método main deve retornar um valor do tipo void na classe Main;
defina o método main como:
   public static void main(String[] args)

É, parece que ele não permite nenhuma alteração… E esse args? Eu nem uso ele, então eu vou tentar tirar!

public static void main(){
     System.out.println("executando codigo");
}
Erro: o método main não foi encontrado na classe Main; defina o método main como:
   public static void main(String[] args)

Puxa vida, será que não podemos alterar nada? Vamos tentar então, alterar o tipo do array args para outro, por exemplo, um int:

public static void main(int[] args){
     System.out.println("executando codigo");
}
Erro: o método main não foi encontrado na classe Main; defina o método main como:
   public static void main(String[] args)

Aparentemente, precisamos escrever a assinatura do main como o conhecemos… Mas e se eu tentar variar o array de String (String[] args)? Em outras palavras, que tal tentarmos um varargs de String? Vejamos o que acontece:

public static void main(String ... args){
     System.out.println("executando codigo");
}

Testando minha aplicação novamente:

> executando código

Finalmente a minha aplicação rodou! Além de apenas variar de array de String para varargs, podemos também alterar o nome do parâmetro, não precisa ser args, pode ser qualquer nome:

public static void main(String[] variavel){
     System.out.println("executando codigo");
}

Testando novamente:

> executando código

Excelente! Agora eu sei quais são as restrições para declarar o método main:

Como vimos, para nossa aplicação executar precisamos do método main, porém o Java só entende que é o método main na nossa aplicação se seguir essa assinatura: public static void main(String[] args). Vimos também, que a única alteração permitida é alterar o array de String para um varargs de String, pois na prática funcionará da mesma maneira.

Não sabia que o método main era tão restrito? Quer se aprofundar mais na linguagem Java? Pensando nisso o instrutor Guilherme Silveira criou a trilha de certificação Java com 9 cursos preparatórios para certificação da Oracle!

Fique por dentro

(Última atualização em: 12 de maio de 2016)

Content Editor at Alura and Software Developer

  • Alexandre

    Faltou testar trocar o tipo do parâmetro de String para outro qualquer.

    • Boa Alexandre! De fato faltou esse teste. Respondendo essa questão, ele espera de fato um parâmetro do tipo String, portanto, outro tipo também não é válido. (Eu fiz a alteração no post também. Obrigado 🙂 )

  • ANDRE LUIZ GONCALVES FRANCO

    Boa tarde Alex.
    Para qual certificação está estudando ? E os livros que tem estudado ?

    • Opa André, tudo bem?

      Estou estudando para a oracle 1z0-803. Atualmente não peguei um livro para estudar, estou acompanhando os cursos do Alura que são muito bons! Você precisa de sugestões para livros?

      Abraços.

  • Pingback: Dicas e truques de IntelliJ IDEA para quem está começando - Blog da Alura: desenvolvimento, design e muita tecnologia()

Próximo ArtigoComo começar (e persistir) na carreira de 3d e Animação: do mergulho à aterrisagem, passando por algumas acrobacias.