Una de las facilidades que nos provee la clase System (java.lang.System), es poder acceder a ‘System Properties’ (Propiedades del Sistema Utilizada por la JVM) y también a ‘Environment Variables’ (de SO), siendo ambos definidos de manera externa a nuestro programa.

System Properties:

Veamos las System Properties, las cuales nuestra JVM tiene acceso a sus valores en cualquier momento de ejecución de nuestros programas.

Ejemplo:

Output:

User Defined System Properties (VM args):

Además de las System Properties pre-definidas, podemos crear nuestras propias System Properties y usarlas para alimenar a nuestros programas con datos definidos al momento de correr la jvm usando el comando java.

Sintaxis de una User Defined System Property:

java -Darg1=foo1 -Darg2=foo2  -Darg3=foo3 com.MyClass

Nota: Muy importante que la D sea mayuscula! Es Keysensitive.

Ejemplo:

Output:
¡Hola!

VM args (System Properties) vs Program args

Los Program Args son argumentos que son pasados a tu aplicacion, los cuales son accecibles a traves del parametro “args” de tipo String array de tu metodo main. 
Los Program arguments los especificás despues del nombre de la clase.

Los VM Args son argumentos tal como System Properties que son pasados a al interprete de java. Los VM Args los especificas después la llamada al interpreta java (es decir ‘java’) y antes del nombre de la clase.

Veamos un ejemplo de ambos usados simultaneamente:

Output:

¡Hola! Esteban

Environment Variables

Las Variables de Entorno (Environment Variables) son pares clave/valor tal como las Properties. Muchos Sistemas Operativos usan las Variables de Entorno para permitir pasarle informacion de configuracion a los distintos programas.

Nosotros podemos acceder a las variables de entorno propias del Sistema Operativo, en cualquier momento dentro de nuestro programa.

Para ejemplificar lo anterior vamos a acceder a los valores de dos variables de entorno del SO muy conocidas por nosotros:

Output:

User Defined Environment Variables

Obviamente podemos definir y crear nuestras propias variables del entorno de SO. Y tambien podemos acceder a sus valores dentro de nuestros programas.

Por ejemplo:

Creando nuestra variable de entorno desde el CMD:

Output:

soyElValor

Creando nuestra variable de entorno desde la GUI:

Output:

soyElValor

Conclusion:

Aunque conceptualmente son lo mismo, es decir ambas son mapas de clave/valor. Pero existen algunas diferencias,

  • Una de ellas es que las Properties estan contenidas unicamente dentro de la JVM mientras que la Environment Variables son globales a nivel de SO es decir disponible a todas las aplicaciones corriendo en la misma maquina. En resumen tienen diferente SCOPE.
  • Las Properties podemos modicarlas en RUNTIME mientras que las Environment Variables son copias inmutables de las variables de entorno del SO.
  • Las Properites obligadamente deben estar presentes al momento de empaquetar (packaging ) nuestra aplicacion, mientras que las Environment Variables podemos crearlas en cualquier momento.
145c