• Java 类之 java.lang.System


    Java 类之 java.lang.System

    一、简介

    java.lang.System 类是 Java 编程语言中的一个核心类,提供了与系统交互的方法和字段。

    public final class System
    
    • 1

    二、主要功能

    1、currentTimeMillis() - 获取当前时间的毫秒数

    说明

    该方法返回自1970年1月1日00:00:00 UTC以来的当前时间与此类实例创建的时间的毫秒差。

    代码示例

    long currentTime = System.currentTimeMillis();
    System.out.println("Current Time in milliseconds: " + currentTime);
    
    • 1
    • 2

    2、getProperty(String key) - 获取系统属性

    说明

    该方法根据指定的键检索系统属性值。

    代码示例

    String javaVersion = System.getProperty("java.version");
    System.out.println("Java Version: " + javaVersion);
    
    • 1
    • 2

    3、exit(int status) - 终止虚拟机

    说明

    该方法终止当前正在运行的 Java 虚拟机。

    代码示例

    System.out.println("Before exit");
    System.exit(0);
    System.out.println("After exit"); // 不会执行到这里
    
    • 1
    • 2
    • 3

    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 的内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、gc() - 请求垃圾回收

    说明

    该方法是请求 Java 虚拟机进行垃圾回收。

    代码示例

    // 在某些情况下,可以显式调用垃圾回收
    System.gc();
    
    • 1
    • 2

    三、其它

    1、为什么 System 类要提供一个数组拷贝方法?

    System 类提供 arraycopy 方法主要出于性能和效率的考虑。这个方法是为了在底层执行高效的数组拷贝操作而设计的。以下是一些原因解释为什么 System.arraycopy 方法是有用的:

    1. 底层性能优化: System.arraycopy 在底层通常会使用系统级别的内存复制操作,这可能比在 Java 代码中使用循环手动复制数组元素更为高效。这对于大规模数据的拷贝尤其有利。
    2. 原子性: arraycopy 方法是原子的,即要么执行整个拷贝操作,要么不执行。在多线程环境中,这是很重要的,可以避免并发问题,确保在拷贝期间没有其他线程对数组进行修改。
    3. 支持不同类型的数组: arraycopy 可以用于复制不同类型的数组,例如将一个 int 数组的一部分复制到一个 Object 数组中。这种灵活性是手动循环复制难以提供的。
    4. 简化代码: 使用 System.arraycopy 可以减少代码量,使代码更简洁、易读。这对于需要频繁进行数组操作的情况尤为有用。
    5. 系统级内存操作: arraycopy 可以利用底层系统的内存复制机制,因此在某些情况下,比手动循环更为高效,尤其是对于较大的数组。

    总体而言,System.arraycopy 是为了提供一个高性能、原子性、灵活且易用的数组拷贝方法,以适应各种不同的应用场景。在处理大量数据和对性能要求较高的情况下,使用这个方法可以更好地满足需求。

    2、System.getProperty 常用于获取那些属性?

    System.getProperty 方法常用于获取与系统相关的属性信息。通过指定属性的键(key),可以检索与该键相关联的属性值。以下是一些常用的键和相应的属性信息:

    1. 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 虚拟机实现名称。
    2. 操作系统属性:
      • "os.name": 操作系统的名称。
      • "os.arch": 操作系统的架构。
      • "os.version": 操作系统的版本。
    3. 用户和目录属性:
      • "user.name": 用户的账户名称。
      • "user.home": 用户的主目录。
      • "user.dir": 用户的当前工作目录。
    4. 文件分隔符和路径分隔符:
      • "file.separator": 文件分隔符(在 UNIX 系统上是"/“,在 Windows 系统上是”")。
      • "path.separator": 路径分隔符(在 UNIX 系统上是":“,在 Windows 系统上是”;")。

    这些属性提供了有关 Java 运行时环境、操作系统和用户环境的信息。通过调用 System.getProperty 方法并传递相应的键,可以在程序中获取这些属性的值,从而实现对运行环境和系统配置的动态适应。

    3、关于 System 类还有哪些需要注意的点吗?

    除了前面提到的一些常用的方法和属性之外,还有一些关于 System 类需要注意的点:

    1. System.exit() 方法:
      • 使用 System.exit(int status) 可以终止当前正在运行的 Java 虚拟机。注意,如果在程序中调用了 System.exit(),将立即终止整个 Java 运行时,可能导致一些未完成的操作无法完成。在正常情况下,程序应该在退出之前完成必要的清理工作。
    2. System.gc() 方法:
      • 调用 System.gc() 是一个提示 Java 虚拟机执行垃圾回收的方法,但并不能确保立即执行垃圾回收。垃圾回收是由 Java 虚拟机自行管理的,因此程序员通常不需要显式调用 System.gc()
    3. 输入输出流:
      • System.inSystem.outSystem.err 分别代表标准输入、标准输出和标准错误输出。它们分别是 InputStreamPrintStream 的实例。可以使用这些流来进行输入和输出操作。
    4. 性能和效率:
      • System.arraycopy() 方法是一个高效的数组复制方法,特别适用于大规模数据的拷贝。在需要处理大量数据时,使用该方法可以提高性能。
    5. 安全性:
      • 由于 System.exit() 方法可以终止整个 Java 运行时,要慎重使用,避免在正常情况下滥用这个方法。在通常情况下,应该使用异常或其他控制流程来安全地退出程序。
    6. 环境属性:
      • 使用 System.getProperty(String key) 方法可以获取与系统相关的属性信息。这些信息可以用于适应不同的运行环境和系统配置。

    总体而言,System 类提供了一些与系统交互的基本方法和属性,但在使用一些方法时需要谨慎,特别是涉及到程序终止和垃圾回收的情况。

  • 相关阅读:
    如何搭建代理镜像仓库
    springcloud22:sentinal的使用
    十天学完Vue学习总结
    Three.js一起学-对比WebGL和Three.js的渲染流程
    GBASE 8A v953报错集锦28--使用企业管理器执行 select count(1) into @c from t1;报错
    JavaScript中获取屏幕,窗口和网页大小
    HazelEngine 学习记录 - Shader Asset Files
    CF1651F Tower Defense
    大工22春《钢筋混凝土结构课程设计》模版及要求【标准答案】
    常见语言的hashmap实现方法
  • 原文地址:https://blog.csdn.net/qq_29689343/article/details/134473380