Para que serve o String[] args em Java?

(Last Updated On: 17 de Fevereiro de 2017)

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… Agora todas as vezes que eu precisar testar a minha aplicação eu terei que executar meu programa e informar o ambiente manualmente?

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.

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? Compartilhe sua solução conosco nos comentários!

Aproveite também e assine a nossa newsletter para receber conteúdos como este 😉

FIQUE POR DENTRO

Content Editor at Alura and Software Developer

  • Fernando Stefanini

    Muito interessante a explicação.

  • Fernando Stefanini

    Muito bom.

  • Herbert Pereira

    Direto naS DuvidaS, excelente!!
    Parabéns Pelas Explicações!!!

    • Alex Felipe

      Obrigado pelo feedback, Herbert! Que bom que tenha gostado. 🙂

      Abraços

Próximo ArtigoRecebendo dados em Java