Java: Conheça o método main

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? Aqui na Alura temos uma formação Java.

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor com foco em Java, Kotlin, Android e Spring. É expert em Programação Orientada a Objetos, visando sempre compartilhar as melhores práticas e tendências do mercado para desenvolvimento de software com quem está estudando o assunto. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos sobre o desenvolvimento.

Veja outros artigos sobre Programação