Java 由Properties类扩展的哈希表中的默认值
在Windows2012 R2平台上,我注意到winver返回6.3,但System.getProperty(“os.version”)返回6.2;我正在查看以下源代码:Java 由Properties类扩展的哈希表中的默认值,java,properties,hashtable,Java,Properties,Hashtable,在Windows2012 R2平台上,我注意到winver返回6.3,但System.getProperty(“os.version”)返回6.2;我正在查看以下源代码: class [More ...] Properties extends Hashtable<Object,Object> { protected Properties defaults; public String [More ...] getProperty(String key) {
class [More ...] Properties extends Hashtable<Object,Object> {
protected Properties defaults;
public String [More ...] getProperty(String key) {
Object oval = super.get(key);
String sval = (oval instanceof String) ? (String)oval : null;
return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
}
哈希表的内容是什么?它是如何填充的?(我没有将java源代码作为项目加载到我的eclipse工作台中)系统属性
os.version
是由JVM本身添加的,这要归功于静态本机方法initProperties(Properties)
,正如您在527
行中看到的那样。初始化系统类时调用此方法,该操作由方法initializeSystemClass()
完成
换句话说,这意味着您的JVM的本机代码无法识别您的os版本,您应该升级JDK以解决此问题
是一篇博客文章,其中博主对旧版本的Java有相同的问题,升级它就足以解决该问题。此问题在Java 6u38之前出现过。从6u38开始,这个问题就解决了。指定了JDK 6u38发布时Java运行时环境(JRE)的安全基线
首先使用EPMJavaJDK版本。
正如您看到的,它正在生成不正确的信息,现在使用的是更高版本的JDK 7。
因此,这突出了问题的根源在于Java的版本
资源链接:
我怀疑os.version的值是从Object oval获得的=
太好了,拿(钥匙);。我的怀疑正确吗
答复:
你说得对。但这里有一些机制
第一种机制:
System.getProperty("os.version"); //which is called the OS version.
System.getProperty("os.version", "Windows Server 2012 R2(6.3)");
getProperty方法返回一个包含属性值的字符串。如果属性不存在,此版本的getProperty将返回null
第二种机制:
System.getProperty("os.version"); //which is called the OS version.
System.getProperty("os.version", "Windows Server 2012 R2(6.3)");
getProperty需要两个字符串参数:第一个参数是要查找的键,第二个参数是在找不到键或键没有值时返回的默认值。例如,下面对getProperty的调用将查找名为os.version
的系统属性。这不是有效的系统属性,因此此方法不返回null,而是返回作为第二个参数提供的默认值:“Windows Server 2012 R2(6.3)”
系统类提供的访问属性值的最后一个方法是getProperties方法,它返回Properties对象此对象包含一整套系统属性定义。
哈希表的内容是什么?它是如何填充的
?
答复:
属性扩展。从哈希表继承的某些方法支持以下操作:
测试以查看属性中是否存在特定的键或值
反对,
获取当前的键/值对数
删除键及其值
将键/值对添加到属性列表中
枚举值或键
通过其键检索值,以及
查找属性对象是否为空
您可以从这里了解更多关于和的信息
读取与属性相关的信息,并可通过以下java类进行更改:
Oracle的说明和建议
警告:更改系统属性有潜在危险,并且
应该谨慎行事。许多系统属性不会被重新读取
启动后,并在那里提供信息。换一些
属性可能有意外的副作用
注:上述某些方法在哈希表中定义,
并因此接受除字符串以外的键和值参数类型。总是
使用字符串作为键和值,即使该方法允许其他
类型。也不要在上调用Hashtable.set或Hastable.setAll
属性对象;始终使用Properties.setProperty
您的问题不清楚,您的问题是关于对象哈希表/属性如何工作,或者您想知道os.version是如何添加到系统属性中的?@NicolasFilotto我想知道os.version是如何添加到系统属性中的