Método Java main () explicado
1. Visão geral
Todo programa precisa de um local para iniciar sua execução; falando sobre programas Java, esse é o métodomain.
Estamos tão acostumados a escrever o métodomain durante nossas sessões de código que nem prestamos atenção aos detalhes. Neste artigo rápido, vamos analisar esse método e mostrar algumas outras maneiras de escrevê-lo.
2. Assinatura Comum
O modelo do método principal mais comum é:
public static void main(String[] args) { }
É assim que aprendemos, é assim que o IDE preenche automaticamente o código para nós. Mas essa não é a única forma que esse método pode assumir,there are some valid variants we can usee nem todo desenvolvedor presta atenção a esse fato.
Antes de mergulharmos nessas assinaturas de método, vamos revisar o significado de cada palavra-chave da assinatura comum:
-
public - modificador de acesso, significando visibilidade global
-
static - o método pode ser acessado direto da classe, não temos que instanciar um objeto para ter uma referência e usá-lo
-
void - significa que este método não retorna um valor
-
main - o nome do método, que é o identificador que a JVM procura ao executar um programa Java
Já o parâmetroargs representa os valores recebidos pelo método. É assim que passamos argumentos para o programa quando o iniciamos.
O parâmetroargs é uma matriz deStrings. No exemplo a seguir:
java CommonMainMethodSignature foo bar
estamos executando um programa Java chamadoCommonMainMethodSignaturee passando 2 argumentos:fooebar. Esses valores podem ser acessados dentro do métodomain comoargs[0] (tendofoo como valor) eargs[1] (tendobar como valor).
No próximo exemplo, estamos verificando argumentos para decidir se carregaremos os parâmetros de teste ou produção:
public static void main(String[] args) {
if (args.length > 0) {
if (args[0].equals("test")) {
// load test parameters
} else if (args[0].equals("production")) {
// load production parameters
}
}
}
É sempre bom lembrar que IDEs também podem passar argumentos para o programa.
3. Diferentes maneiras de escrever um métodomain()
Vamos verificar algumas maneiras diferentes de escrever o métodomain. Embora não sejam muito comuns, são assinaturas válidas.
Observe que nenhum deles é específico para o métodomain, eles podem ser usados com qualquer método Java, mas também são uma parte válida do métodomain.
Os colchetes podem ser colocados perto deString, como no modelo comum, ou perto deargs em ambos os lados:
public static void main(String []args) { }
public static void main(String args[]) { }
Os argumentos podem ser representados como varargs:
public static void main(String...args) { }
Podemos até adicionarstrictfp para o métodomain(), que é usado para compatibilidade entre processadores ao trabalhar com valores de ponto flutuante:
public strictfp static void main(String[] args) { }
synchronized efinal também são palavras-chave válidas para o métodomain, mas não terão efeito aqui.
Por outro lado,final pode ser aplicado emargs para evitar que a matriz seja modificada:
public static void main(final String[] args) { }
Para encerrar esses exemplos, também podemos escrever o métodomain com todas as palavras-chave acima (que, é claro, você provavelmente nunca usará em uma aplicação prática):
final static synchronized strictfp void main(final String[] args) { }
4. Tendo mais de um métodomain()
Também podemos definirmore than one main method inside our application.
Na verdade, algumas pessoas o usam como uma técnica de teste primitiva para validar classes individuais (embora frameworks de teste comoJUnit sejam muito mais indicados para esta atividade).
Para especificar qual métodomain a JVM deve executar como o ponto de entrada de nosso aplicativo, usamos o arquivoMANIFEST.MF. Dentro do manifesto, podemos indicar a classe principal:
Main-Class: mypackage.ClassWithMainMethod
Isso é usado principalmente ao criar um arquivo executável.jar. Indicamos qual classe possui o métodomain para iniciar a execução, através do arquivo de manifesto localizado emMETA-INF/MANIFEST.MF (codificado em UTF-8).
5. Conclusão
Este tutorial descreveu os detalhes do métodomain e algumas outras formas que ele pode assumir, mesmo aquelas que não são muito comuns para a maioria dos desenvolvedores.
Lembre-se de quealthough all the examples that we’ve shown are valid in terms of syntax, they just serve the educational purposee na maioria das vezes ficaremos com a assinatura comum para fazer nosso trabalho.