Системные свойства Java и переменные среды


Ответы:


149

Я думаю, что разница между двумя сводится к доступу. Системные переменные среды доступны любому процессу, а системные свойства Java доступны только процессу, к которому они добавлены.

Также, как сказал Богемский, переменные env устанавливаются в ОС (однако они «могут» быть установлены через Java), а системные свойства передаются как параметры командной строки или устанавливаются через setProperty().


5
Наконец, это то, как переменные добавляются и область видимости переменных.
— Правин Срипати

Имейте в виду, что другие процессы могут найти cmd, используемый для запуска процесса, и, следовательно, свойства системы java.
— Кристиан

359
  • Системные свойства устанавливаются в командной строке Java с использованием-Dpropertyname=valueсинтаксиса. Они также могут быть добавлены во время выполнения, используяSystem.setProperty(String key, String value)различные System.getProperties().load()методы.
    Чтобы получить конкретное системное свойство, вы можете использоватьSystem.getProperty(String key)илиSystem.getProperty(String key, String def).

  • Переменные среды устанавливаются в ОС, например, в Linuxexport HOME=/Users/myusernameили в Windows иSET WINDIR=C:\Windowsт. Д., И, в отличие от свойств, могут не устанавливаться во время выполнения.
    Чтобы получить конкретную переменную среды вы можете использоватьSystem.getenv(String name).


42
Абсолютно правильно, богемный. Переменные среды - это «вещь ОС», а свойства - «вещь Java». Так получилось, что Java решила представить переменные ОС в качестве свойств (так же, как Java выставляет текущий каталог и «другие вещи» в качестве свойств), но на самом деле это разные вещи.
— paulsm4

@MarekSebera что так ты имеешь ввиду?
— Богемный

8
System.grtProperties()перечисляет все свойства, и те, которые установлены из командной строки, будут там, но нет никакого способа отличить те от других свойств, добавленных системой, если это то, что вы спрашиваете.
— Богемный

11
Обратите внимание, что вы также можете установить системные свойства с помощью переменной среды JAVA_TOOL_OPTIONS.
— flacs

6
@KanagaveluSugumar Да, вам нужно перезапустить: настройки переменных среды считываются из среды при запуске. т.е. System.getenv(String name)не динамически считывает значение из системы во время вызова.
— Богемный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.