Являются ли свойства Java-системы всегда ненулевыми?
Есть пара системных свойств Java, среди которых такие вещи, как java.home
и path.separator
, user.home
. spec не упоминает никаких формальных promises о существовании этих значений.
Особенно меня интересует user.home
. Всегда ли это указывает на какой-то существующий путь?
Ответы
Ответ 1
Я думаю, вы можете смело предположить, что все свойства в этом списке всегда доступны в любой недавней (с поддержкой Oracle) JVM.
Однако, проверка null
более защитная, и в этом случае она не дорогая.
Я никогда не видел, чтобы user.home
был нулевым или был неправильно указан по умолчанию. Однако имейте в виду, что пользователи могут переопределять с помощью -Duser.home=...
, поэтому вы не можете полагаться на него, чтобы указать на существующий путь.
Ответ 2
В документации, которую вы указали, указано
The getProperty method returns a string containing the value of the property. If the property does not exist, this version of getProperty returns null.
Итак, если свойство не существует, вы получаете значение null
Ответ 3
Спектр говорит, что user.home
содержит пользовательский домашний каталог, он не говорит, что может содержать null
. Я не сомневаюсь, что JVM гарантирует, что он всегда установлен.
Ответ 4
Свойства по умолчанию будут различаться в зависимости от ОС. Будут некоторые ключи, для которых не определены значения. На моей машине я нашел user.variant
и user.timezone
без каких-либо значений! Ниже приведен код, в котором будут перечислены все пары значений ключа:
Properties prop = System.getProperties();
Set<Object> set = prop.keySet();
Iterator<Object> itr = set.iterator();
while(itr.hasNext()){
Object obj = itr.next();
String propVal = System.getProperty(obj.toString());
System.out.println(obj.toString()+" = "+propVal);
}
}
Относительно вашей конкретной ссылки о user.home
, похоже, она определялась большую часть времени. Ознакомьтесь с этим интересным сообщением, где люди опубликовали список свойств системы на разных машинах.