java.system.getProperty(String key, String def)方法的疑问
本帖最后由 fulijung 于 2013-12-15 01:53:13 编辑
getProperty(String key, String def) 获取用指定键描述的系统属性(从系统环境或*.properties等配置文件中读取key对应的值,当key值为NULL时,返回def的值; 当key值不为NULL时,返回key的值 )。
但是下面代码输出获得的值为什么不一样呢
public class MyClass
{
public static void main(String[] args)
{
String s1 = System.getProperty("os.name","My default");
// Notice that the property key is misspelled here:
String s2 = System.getProperty("os-name","My default");
// Notice that the output of the following statement can be
// different for different operating systems:
System.out.println("The OS name is: " + s1);
// The following statement displays the default property name:
System.out.println("The OS name is: " + s2);
}
}
/*
下面是打印结果,为何String s2 与 String s1定义语句一样怎么输出就不一样呢?
Output:
The OS name is: Windows XP
The OS name is: My default
*/
看了api文档是如下解释的,但还是想不明白,希望大家用易于理解的话解释一下,到底怎么回事?
getProperty
public static String getProperty(String key,
String def)获取用指定键描述的系统属性。
首先,如果有安全管理器,则用该 key 作为参数调用 checkPropertyAccess 方法。
如果没有当前系统属性的集合,将用与 getProperties 方法相同的方式首先创建并初始化系统属性的集合。
参数:
key - 系统属性的名称。
def - 默认值。
返回:
系统属性的字符串值,如果没有带有此键的属性,则返回默认值。
抛出:
SecurityException - 如果安全管理器存在并且其 checkPropertyAccess 方法不允许访问指定的系统属性。
NullPointerException - 如果 key 为 null。
IllegalArgumentException - 如果 key 为空。
------解决方案--------------------如果key为null,会抛NullPointerException
如果key值不在系统属性集合中,返回def
如果key在系统属性集合中,返回该属性的值
os-name不在属性集合中,当然返回def了
------解决方案--------------------楼主可以将getProperties() 和 getProperty(key, def)结合看,getProperties()取得属性的集合,如果不在集合中的,通过getProperty(key, def)取时,就得到def的默认值了。
getProperties
public static Properties getProperties()确定当前的系统属性。
首先,如果有安全管理器,则不带参数直接调用其 checkPropertiesAccess 方法。这可能导致一个安全性异常。
将 getProperty(String) 方法使用的当前系统属性集合作为 Properties 对象返回。如果没有当前系统属性集合,则先创建并初始化一个系统属性集合。