Para que serve o String[] args em Java?

Para que serve o String[] args em Java?

String[] args em Java

Acabei de terminar mais uma funcionalidade da minha aplicação e preciso testá-la. Porém a minha aplicação possui o ambiente de desenvolvimento, teste e produção:


public class Main {

public static void main(String[] args) {

String ambiente = ""; 
if(ambiente.equals("DEVELOPMENT")){ 
    System.out.println("executando codigo de desenvolvimento");
     } else if (ambiente.equals("TEST")){ 
         System.out.println("executando codigo de teste");
     } else if (ambiente.equals("PRODUCTION")){ 
         System.out.println("executando codigo de producao"); 
    }
  }

}

Agora vou usar a classe Scanner e fazer a leitura pelo teclado para testar o meu código:


Scanner sc = new Scanner(System.in); 
System.out.println("Informe o ambiente");
String ambiente = sc.nextLine();

Resultado:


Informe o ambiente DEVELOPMENT executando codigo de devesenvolvimento

Poxa vida...

Além de cansativo, existe a possibilidade de eu errar a opção e executar um ambiente por engano ou até mesmo não executar nenhum. Como eu posso fazer com que, ao executar o meu programa, ele já saiba que ambiente rodar? Pelo parâmetro args do método main!


public static void main(String[] args) {
     String ambiente = args[0]; //código }

Ué, aquela variável que não serve pra nada?

O parâmetro args é um array que recebe dados da command line (linha de comando), ou seja, no momento que executamos a nossa aplicação podemos enviar uma informação por meio dele.

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Enviando o parâmetro args na execução

Vamos então fazer teste enviando o valor DEVELOPMENT durante a execução da classe Main:

cap-3

Ótimo! Agora não vou precisar ficar digitando o ambiente todas as vezes, mas... Ainda tenho que ficar escrevendo no command line...

Posso acabar errando o parâmetro em algum momento e fazer uma caca... Para resolver esse problema, basta criar arquivos .bat para cada um dos ambiente!

DEVELOPMENT.bat:

java Main DEVELOPMENT

PRODUCTION.bat:

java Main PRODUCTION

TEST.bat:

java Main TEST

Testando os ambientes:

cap-prod-bat cap-dev-bat
cap-test-bat

Excelente! Agora eu posso testar a minha aplicação em vários ambientes sem nenhuma preocupação! E se eu precisar saber, por exemplo, saber qual versão do Java está sendo executada em cada ambiente?

Podemos utilizar as Properties da classe System e pegar uma propriedade do ambiente por meio do método getProperty():


//código

if(ambiente.equals("DEVELOPMENT")){ 
    System.out.println("Versao do Java: " + System.getProperty("java.version"));System.out.println("executando codigo de desenvolvimento");
}

//código

Testando o ambiente de desenvolvimento:

cap-dev-version-bat

Excelente! Agora consigo verificar se o meu ambiente está sendo executado em uma versão esperada! Poderíamos coletar outras informações por meio do getProperty(), como por exemplo usuário (user.name) ou o sistema operacional (os.name).

E aí, já passou por alguma situação em que precisava testar ambientes diferentes? O que achou dessa alternativa utilizando o String[] args e as Properties da classe System?

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