Java 类之 java.lang.System
一、简介
java.lang.System
类是 Java 编程语言中的一个核心类,提供了与系统交互的方法和字段。
public final class System
二、主要功能
1、currentTimeMillis()
- 获取当前时间的毫秒数
说明
该方法返回自1970年1月1日00:00:00 UTC以来的当前时间与此类实例创建的时间的毫秒差。
代码示例
long currentTime = System.currentTimeMillis();
System.out.println("Current Time in milliseconds: " + currentTime);
2、getProperty(String key)
- 获取系统属性
说明
该方法根据指定的键检索系统属性值。
代码示例
String javaVersion = System.getProperty("java.version");
System.out.println("Java Version: " + javaVersion);
3、exit(int status)
- 终止虚拟机
说明
该方法终止当前正在运行的 Java 虚拟机。
代码示例
System.out.println("Before exit");
System.exit(0);
System.out.println("After exit"); // 不会执行到这里
4、arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
- 复制数组
说明
该方法从源数组复制一个数组到目标数组。
代码示例
int[] sourceArray = {1, 2, 3, 4, 5};
int[] destinationArray = new int[5];
System.arraycopy(sourceArray, 0, destinationArray, 0, sourceArray.length);
// destinationArray 现在包含了 sourceArray 的内容
5、gc()
- 请求垃圾回收
说明
该方法是请求 Java 虚拟机进行垃圾回收。
代码示例
// 在某些情况下,可以显式调用垃圾回收
System.gc();
三、其它
1、为什么 System 类要提供一个数组拷贝方法?
System
类提供 arraycopy
方法主要出于性能和效率的考虑。这个方法是为了在底层执行高效的数组拷贝操作而设计的。以下是一些原因解释为什么 System.arraycopy
方法是有用的:
- 底层性能优化:
System.arraycopy
在底层通常会使用系统级别的内存复制操作,这可能比在 Java 代码中使用循环手动复制数组元素更为高效。这对于大规模数据的拷贝尤其有利。 - 原子性:
arraycopy
方法是原子的,即要么执行整个拷贝操作,要么不执行。在多线程环境中,这是很重要的,可以避免并发问题,确保在拷贝期间没有其他线程对数组进行修改。 - 支持不同类型的数组:
arraycopy
可以用于复制不同类型的数组,例如将一个int
数组的一部分复制到一个Object
数组中。这种灵活性是手动循环复制难以提供的。 - 简化代码: 使用
System.arraycopy
可以减少代码量,使代码更简洁、易读。这对于需要频繁进行数组操作的情况尤为有用。 - 系统级内存操作:
arraycopy
可以利用底层系统的内存复制机制,因此在某些情况下,比手动循环更为高效,尤其是对于较大的数组。
总体而言,System.arraycopy
是为了提供一个高性能、原子性、灵活且易用的数组拷贝方法,以适应各种不同的应用场景。在处理大量数据和对性能要求较高的情况下,使用这个方法可以更好地满足需求。
2、System.getProperty 常用于获取那些属性?
System.getProperty
方法常用于获取与系统相关的属性信息。通过指定属性的键(key),可以检索与该键相关联的属性值。以下是一些常用的键和相应的属性信息:
- Java 运行时环境属性:
"java.version"
: Java 运行时环境版本。"java.vendor"
: Java 运行时环境供应商。"java.vendor.url"
: Java 供应商的 URL。"java.home"
: Java 安装目录。"java.vm.specification.version"
: Java 虚拟机规范版本。"java.vm.specification.vendor"
: Java 虚拟机规范供应商。"java.vm.specification.name"
: Java 虚拟机规范名称。"java.vm.version"
: Java 虚拟机实现版本。"java.vm.vendor"
: Java 虚拟机实现供应商。"java.vm.name"
: Java 虚拟机实现名称。
- 操作系统属性:
"os.name"
: 操作系统的名称。"os.arch"
: 操作系统的架构。"os.version"
: 操作系统的版本。
- 用户和目录属性:
"user.name"
: 用户的账户名称。"user.home"
: 用户的主目录。"user.dir"
: 用户的当前工作目录。
- 文件分隔符和路径分隔符:
"file.separator"
: 文件分隔符(在 UNIX 系统上是"/“,在 Windows 系统上是”")。"path.separator"
: 路径分隔符(在 UNIX 系统上是":“,在 Windows 系统上是”;")。
这些属性提供了有关 Java 运行时环境、操作系统和用户环境的信息。通过调用 System.getProperty
方法并传递相应的键,可以在程序中获取这些属性的值,从而实现对运行环境和系统配置的动态适应。
3、关于 System 类还有哪些需要注意的点吗?
除了前面提到的一些常用的方法和属性之外,还有一些关于 System
类需要注意的点:
System.exit()
方法:- 使用
System.exit(int status)
可以终止当前正在运行的 Java 虚拟机。注意,如果在程序中调用了System.exit()
,将立即终止整个 Java 运行时,可能导致一些未完成的操作无法完成。在正常情况下,程序应该在退出之前完成必要的清理工作。
- 使用
System.gc()
方法:- 调用
System.gc()
是一个提示 Java 虚拟机执行垃圾回收的方法,但并不能确保立即执行垃圾回收。垃圾回收是由 Java 虚拟机自行管理的,因此程序员通常不需要显式调用System.gc()
。
- 调用
- 输入输出流:
System.in
、System.out
和System.err
分别代表标准输入、标准输出和标准错误输出。它们分别是InputStream
和PrintStream
的实例。可以使用这些流来进行输入和输出操作。
- 性能和效率:
System.arraycopy()
方法是一个高效的数组复制方法,特别适用于大规模数据的拷贝。在需要处理大量数据时,使用该方法可以提高性能。
- 安全性:
- 由于
System.exit()
方法可以终止整个 Java 运行时,要慎重使用,避免在正常情况下滥用这个方法。在通常情况下,应该使用异常或其他控制流程来安全地退出程序。
- 由于
- 环境属性:
- 使用
System.getProperty(String key)
方法可以获取与系统相关的属性信息。这些信息可以用于适应不同的运行环境和系统配置。
- 使用
总体而言,System
类提供了一些与系统交互的基本方法和属性,但在使用一些方法时需要谨慎,特别是涉及到程序终止和垃圾回收的情况。