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. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Veja outros artigos sobre Programação