Qual è la differenza tra le proprietà di sistema System.getProperties () e le variabili di ambiente System.getenv () in una JVM?
Qual è la differenza tra le proprietà di sistema System.getProperties () e le variabili di ambiente System.getenv () in una JVM?
Risposte:
Penso che la differenza tra i due si riduce all'accesso. Le variabili di ambiente di sistema sono accessibili da qualsiasi processo e le proprietà di sistema Java sono accessibili solo dal processo a cui sono state aggiunte.
Inoltre, come affermato da Bohemian, le variabili env sono impostate nel sistema operativo (tuttavia possono essere impostate tramite Java) e le proprietà di sistema vengono passate come opzioni della riga di comando o impostate tramite setProperty()
.
Le proprietà di sistema sono impostate sulla riga di comando Java utilizzando la-Dpropertyname=value
sintassi. Possono anche essere aggiunti in fase di esecuzione utilizzandoSystem.setProperty(String key, String value)
o tramite i vari
System.getProperties().load()
metodi.
Per ottenere una proprietà di sistema specificaè possibile utilizzareSystem.getProperty(String key)
oSystem.getProperty(String key, String def)
.
Le variabili di ambiente sono impostate nel sistema operativo, ad esempio in Linuxexport HOME=/Users/myusername
o su WindowsSET WINDIR=C:\Windows
ecc. E, a differenza delle proprietà, potrebbero non essere impostate in fase di esecuzione.
Per ottenere una variabile di ambiente specificaè possibile utilizzareSystem.getenv(String name)
.
System.grtProperties()
elenca tutte le proprietà e quelle impostate dalla riga di comando saranno lì, ma non c'è modo di distinguerle dalle altre proprietà aggiunte dal sistema, se è quello che stai chiedendo.
JAVA_TOOL_OPTIONS
.
System.getenv(String name)
non legge dinamicamente il valore dal sistema al momento della chiamata.