O método Java main() ou método main em Java é o ponto de início e fim de todo programa em Java. Durante a execução, apenas as ins­tru­ções que estão dentro do seu âmbito são con­si­de­ra­das. É por isso que é tão im­por­tante que a sintaxe do método seja res­pei­tada até ao mais ínfimo detalhe ao criar o código. Se estiver incorreta, o programa não será executado.

O que é o método main() em Java?

In­de­pen­den­te­mente do projeto que você deseja realizar com essa linguagem de pro­gra­ma­ção e do código conciso ou extenso que você usa para isso, em Java, todo apli­ca­tivo começa com o método main. Se ele não estiver dis­po­ní­vel, o código não poderá ser executado. Antes de passar para main(), primeiro carrega-se a máquina virtual Java (JVM) na memória e compila-se o código. Depois de concluir essas etapas, o código é passado para o método main() do Java para ve­ri­fi­ca­ção e deve ser executado cor­re­ta­mente. Em princípio, também é possível usar vários desses métodos, embora o máximo seja um método main por classe.

A sintaxe do método main() em Java

A sintaxe do método main em Java é sempre a mesma e consiste em várias partes im­por­tan­tes. É assim que se apresenta:

public static void main(String[] args)
java

Esses com­po­nen­tes de­sem­pe­nham as seguintes funções:

  • public: garante que uma classe também pode ser acedida a partir do exterior.
  • static: declara o método como estático. Isto significa que ele pode existir sem que um objeto de uma classe es­pe­cí­fica tenha sido criado pre­vi­a­mente.
  • void: garante que o método main não precisa retornar um valor.
  • main: é o nome com o qual a máquina virtual Java pode iden­ti­fi­car o método assim que executa um programa.
  • String[] args: é uma matriz na qual os ar­gu­men­tos da linha de comando são ar­ma­ze­na­dos e recebidos.

Os di­fe­ren­tes com­po­nen­tes e suas vantagens

Para entender melhor como funciona o método main em Java e por que todos os seus com­po­nen­tes são tão im­por­tan­tes, vamos revisá-los in­di­vi­du­al­mente nas seções a seguir. Em par­ti­cu­lar, mos­tra­re­mos o que acontece se parte da as­si­na­tura estiver faltando. Para isso, es­co­lhe­re­mos um exemplo de código muito simples, que mos­tra­re­mos com o comando Java System.out.println. Ficaria assim:

public class main {
	public static void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Se executar este código, obterá o seguinte resultado:

Texto de ejemplo.
bash

public

public atua como es­pe­ci­fi­ca­dor de acesso e indica à máquina virtual Java onde o programa cor­res­pon­dente é executado. Existem outros mo­di­fi­ca­do­res de acesso, como default, private ou protected. No entanto, se os utilizar dentro do método main, receberá uma mensagem de erro:

public class main {
	private static void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

O resultado cor­res­pon­dente é:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

Esta mensagem de erro indica que não há acesso público ao método.

static

O facto de o método utilizado ser estático é con­fir­mado pela palavra-chave «static». Portanto, também pode ser utilizado in­de­pen­den­te­mente de qualquer instância de classe criada. Se a de­cla­ra­ção «static» for removida, o código fica assim:

public class main {
	public void main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Neste caso, também receberá uma mensagem de erro em vez do resultado desejado:

Error: Main method is not static in class test, please define the main method as:
public static void main(String[] args)
bash

void

«Void» é uma palavra que es­pe­ci­fica que o método principal não deve retornar nenhum valor. Como main() é o ponto inicial e final de um programa em Java, não seria ne­ces­sá­rio retornar nenhum valor. Este é o aspecto que o código teria sem «void»:

public class main {
	public static main(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Esta é a mensagem de erro que causa a omissão da palavra-chave:

Error: Main method must return a value of type void in class Main, please define the main method as:
public static void main(String[] args)
bash

main

Para cada programa em Java, a JVM procura primeiro o chamado iden­ti­fi­ca­dor «main». Este indica onde a execução deve começar e terminar. Assim que o método main termina, a saída também termina. Portanto, esta as­si­na­tura nunca deve ser mo­di­fi­cada ou adi­ci­o­nada. Se fizermos isso no nosso exemplo, o código fica assim:

public class main {
	public static void ersatzMain(String[] args) {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Como a JVM não consegue encontrar o iden­ti­fi­ca­dor, ela encerrará o programa di­re­ta­mente e emitirá apenas a seguinte mensagem de erro:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

String[] args

A matriz String[] args cor­res­ponde à classe java.lang.String e contém dados ar­ma­ze­na­dos como valores de cadeia. Se omitir esta es­pe­ci­fi­ca­ção, o código muda:

public class main {
	public static void main() {
		System.out.println("Texto de ejemplo.");
	}
}
bash

Sem o argumento, o método principal Java não pode ser executado e você receberá novamente a seguinte mensagem de erro:

Error: Main method not found in class, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
bash

Or­to­gra­fias al­ter­na­ti­vas

O exemplo de código apre­sen­tado aqui foi escrito seguindo a sintaxe mais comum. No entanto, pode adaptá-lo fa­cil­mente se desejar uma visão geral melhor. Por exemplo, é possível colocar os colchetes di­re­ta­mente após «args». Ficaria assim:

public static void main(String args[]) { }
java

Também pode armazenar ar­gu­men­tos como «varargs», ou seja, listas de ar­gu­men­tos variáveis:

public static void main(String…args) { }
java

bfd063546a980e7f08f8b24a6a92a018

Ir para o menu principal