Java: Conheça o método main

Java: Conheça o método main

Certificação Oracle

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 e possui experiência em Java, Kotlin, Android. Criador de mais de 40 cursos, como Kotlin, Flutter, Android, persistência de dados, comunicação com Web API, personalização de telas, testes automatizados, arquitetura de Apps e Firebase. É expert em Programação Orientada a Objetos, visando sempre compartilhar as boas práticas e tendências do mercado de desenvolvimento de software. Atuou 2 anos como editor de conteúdo no blog da Alura e hoje ainda escreve artigos técnicos.

Veja outros artigos sobre Programação