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.








