system.getproperty()用于获取jvm的系统属性,如操作系统名称、java版本等,数据源为jvm内部配置;2. system.getenv()用于获取操作系统环境变量,如path、自定义变量等,数据源为操作系统全局配置;3. 两者核心区别在于getproperty面向jvm运行时环境,getenv面向操作系统级设置;4. system类还提供exit()用于终止jvm、currenttimemillis()和nanotime()用于时间测量、arraycopy()用于高效数组复制;5. 设置系统属性可通过setproperty()实现,但需注意安全限制、作用范围仅限当前jvm且应避免随意修改关键属性,建议通过启动参数或配置文件管理。

在Java的世界里,想要探究运行环境的奥秘,System类无疑是你的第一站。它就像一个信息中枢,提供了诸多静态方法,让你能轻松获取到操作系统的名称、版本、Java虚拟机的配置,甚至是环境变量等一系列关键数据。很多时候,我们写程序需要根据不同的部署环境做适配,或者只是单纯地想了解程序运行在哪种“土壤”上,System类就能派上大用场。
要获取系统信息,主要会用到
System.getProperty(String key)
System.getenv(String name)
System.getProperty()
-D
立即学习“Java免费学习笔记(深入)”;
String osName = System.getProperty("os.name");
System.out.println("操作系统名称: " + osName);
// 更多常用属性
System.out.println("Java版本: " + System.getProperty("java.version"));
System.out.println("Java安装目录: " + System.getProperty("java.home"));
System.out.println("用户工作目录: " + System.getProperty("user.dir"));
System.out.println("文件分隔符: " + System.getProperty("file.separator")); // Windows是\, Linux是/而
System.getenv()
PATH
HOME
String pathEnv = System.getenv("PATH");
System.out.println("PATH环境变量: " + pathEnv);
// 尝试获取一个可能存在的自定义环境变量,比如 'MY_APP_CONFIG'
String appConfig = System.getenv("MY_APP_CONFIG");
if (appConfig != null) {
System.out.println("自定义应用配置: " + appConfig);
} else {
System.out.println("未找到 MY_APP_CONFIG 环境变量。");
}值得一提的是,
System.getProperties()
Properties
java.util.Properties properties = System.getProperties();
System.out.println("\n所有系统属性:");
properties.forEach((key, value) -> System.out.println(key + " = " + value));类似地,
System.getenv()
Map<String, String>
java.util.Map<String, String> envMap = System.getenv();
System.out.println("\n所有环境变量:");
envMap.forEach((key, value) -> System.out.println(key + " = " + value));这两个方法,虽然都能让你拿到一些“系统”层面的信息,但它们获取的数据源和设计初衷是截然不同的。这就像你问一个人他的身高和他的银行存款,虽然都是关于他的信息,但来源和性质完全不一样。
System.getProperty()
java.version
os.name
user.home
-Dkey=value
getProperty
而
System.getenv()
PATH
getenv
简单来说,
getProperty
getenv
System类远不止是信息查询工具,它还提供了一些非常基础但又极其重要的系统级操作。有时候,你会发现这些功能在处理一些底层逻辑或者性能优化时特别有用。
一个常见的用途是程序的退出:
System.exit(int status)
status
System.exit(1)
另一个是时间相关的:
System.currentTimeMillis()
System.nanoTime()
还有
System.arraycopy()
arraycopy
// 示例:使用 System.exit
// if (someErrorCondition) {
// System.err.println("致命错误,程序退出!");
// System.exit(1);
// }
// 示例:使用 System.currentTimeMillis 和 System.nanoTime
long startTimeMillis = System.currentTimeMillis();
long startTimeNanos = System.nanoTime();
// 模拟一些耗时操作
for (int i = 0; i < 1000000; i++) {
String s = "test" + i;
}
long endTimeMillis = System.currentTimeMillis();
long endTimeNanos = System.nanoTime();
System.out.println("操作耗时 (毫秒): " + (endTimeMillis - startTimeMillis));
System.out.println("操作耗时 (纳秒): " + (endTimeNanos - startTimeNanos));
// 示例:使用 System.arraycopy
int[] sourceArray = {1, 2, 3, 4, 5};
int[] destinationArray = new int[5];
// 从 sourceArray 的索引 0 开始,复制 3 个元素到 destinationArray 的索引 1
System.arraycopy(sourceArray, 0, destinationArray, 1, 3);
System.out.print("复制后的数组: ");
for (int i : destinationArray) {
System.out.print(i + " "); // 输出: 0 1 2 3 0
}
System.out.println();这些功能虽然看似简单,但在Java程序的日常开发和性能优化中,它们扮演着不可或缺的角色。
虽然我们常常从
System
System.setProperty(String key, String value)
首先,设置系统属性可能会引发
SecurityException
setProperty
其次,被设置的系统属性通常只在当前JVM进程的生命周期内有效。这意味着一旦JVM退出,这些在运行时设置的属性就会消失。如果你需要持久化的配置,那么应该考虑使用配置文件(如
.properties
java.util.Properties
System.getProperties()
Properties
最后,过度或不恰当地修改系统属性可能会影响程序的稳定性和性能。有些系统属性是JVM内部优化或行为的基础,随意修改可能会导致不可预测的行为。例如,修改
file.encoding
-D
以上就是java如何使用System类获取系统信息 javaSystem类系统信息获取的详细教程的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号