[java-guia-certificacao] Passando Key "-D"

Olá, estou estudando através do livro ‘java-se-8-programmer-i-o-guia-para-sua-certificacao-oracle-certified-associate’ e estou com uma dúvida quanto a passagem de argumentos / parâmetros para o método main através do terminal

ao executar comandos como
java nomedoarquivo parametro1 parametro2
tudo fluiu bem, porém não entendi a diferença entre parâmetro / propriedade e argumento, onde o valor é passado através do seguinte código

java -Dkey1=abc -Dkey2=def Foo xpto bar

O que seriam essas keys ? qual a diferença desse tipo de dado para os argumentos ‘foo, xpto, bar’ ?
Ao executar o seguinte código abaixo

java HelloWorldVarArgs -Dkey1=abc -Dkey2=def Foo xpto bar

class HelloWorldVarArgs {
	public static void main (String... args){
		for (String value : args) {
			System.out.println("Hello "+value);
		}
	}
}

A saída é
Hello -Dkey1=abc
Hello -Dkey2=def
Hello Foo
Hello xpto
Hello bar

Com isso não entendi qual a diferença dessa key e como ela é manipulada, aproveito a oportunidade para elogiar o livro, excelente !
Aguardo !

No exemplo do livro, o nome da classe é Foo. No seu comando, você está chamando a execução da sua classe HelloWorldVarArgs e passando todas as outras palavras após o nome da classe como argumentos.
Se você quiser exibir os argumentos, você deve fazer parecido com o seguinte:

public class HelloWorldVarArgs {

public static void main(String args[]) {
	
	System.out.println("Primeiro argumento: " + System.getProperty("key1"));
	System.out.println("Segundo argumento: " + System.getProperty("key2"));
	
	for (String value : args) {
		System.out.println("Hello " + value);
	}
}

}

Executando esta classe com o comando “java -Dkey1=abc -Dkey2=def HelloWorldVarArgs xpto bar”, a saída será:

Primeiro argumento: abc
Segundo argumento: def
Hello xpto
Hello bar

1 curtida

Obrigado,

Estava com essa mesma duvida.