Método main em Java

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

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!

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.

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