System类不支持直接遍历系统属性,仅提供getProperty()和getProperties()方法;前者按键获取单个值(如"os.name"),后者返回Properties对象供遍历,常用stringPropertyNames()或entrySet()方式。

System类本身不提供“遍历系统属性”的功能,也不支持直接遍历所有系统属性。 它只提供静态方法 System.getProperty(String key) 和 System.getProperties() 来读取属性——前者按键查单个值,后者返回一个 Properties 对象(继承自 Hashtable),这个对象才支持遍历。
读取单个系统属性
使用 System.getProperty(String key) 获取指定键的值,例如:
-
System.getProperty("os.name")→ 返回操作系统名称,如 "Windows 10" -
System.getProperty("java.version")→ 返回 JDK 版本,如 "17.0.1" - 若键不存在,返回
null;也可提供默认值:System.getProperty("user.home", "/tmp")
获取全部系统属性并遍历
调用 System.getProperties() 得到一个 Properties 实例,然后可用标准 Map 方式遍历:
- 用
stringPropertyNames()获取所有键名(Set<String>),适合简单遍历 - 用
entrySet()遍历键值对,更直观,例如:
Properties props = System.getProperties();
props.entrySet().forEach(e -> System.out.println(e.getKey() + "=" + e.getValue())); - 注意:该 Properties 对象是运行时快照,后续系统属性变化不会自动反映其中
常见系统属性键名
部分常用键无需记忆,但了解有助于调试和适配:
-
os.name、os.version、os.arch—— 操作系统信息 -
java.home、java.class.path、java.library.path—— JVM 环境路径 -
user.name、user.home、user.dir—— 当前用户与工作目录 -
file.separator、path.separator—— 平台相关分隔符(如\或/)
注意事项
系统属性受安全管理器限制,某些键(如 sun.* 开头)可能被屏蔽或不可读;生产环境慎用未文档化的属性。修改系统属性需用 System.setProperty(),但仅影响当前 JVM 实例,且部分属性(如 java.version)不可修改。

















