【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~-LMLPHP

1️⃣ 概念

Java的System类是Java标准库中一个重要且常用的类。它被设计用于提供与系统相关的操作和信息访问功能。System类的设计目的是为了让开发者更方便地与底层操作系统进行交互,并提供一些常见而有用的系统级别的功能。

System类是一个包含各种静态方法和字段的系统辅助工具类。它提供了一系列静态方法,用于访问系统属性、执行外部命令、获取系统时间等操作。

System类是Java标准库的一部分,它与底层的操作系统交互通过JNI(Java Native Interface)实现,通过调用本地方法访问底层操作系统的功能。

System类具有以下特征:

  • 类中的方法和字段都是静态的,可以直接通过类名调用;
  • 提供了许多与系统环境和资源交互的方法,如获取和设置系统属性、标准输入输出流的访问、执行外部命令等;
  • 提供了与垃圾回收器、Java虚拟机等底层操作相关的方法。

2️⃣ 优势和缺点

  • 优点:
    提供了统一的接口,方便访问与系统相关的信息和行为;提供了跨平台性,使得编写可移植的Java代码成为可能。

  • 缺点:
    过度使用System类的静态方法可能导致代码耦合性增强;类中有些方法在不同的平台上可能表现不一致。

3️⃣ 使用

3.1 System类常用方法

下面表格中列出了System类中的方法和字段,并提供了简要描述。
这些方法和字段允许开发者与底层操作系统进行交互,获取系统属性、执行外部命令、管理输入输出等操作:

下面是一个使用System类的各个方法和字段的Java案例程序:

import java.util.Arrays;

public class SystemExample {
    public static void main(String[] args) {
        // 方法: 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);
        System.out.println(Arrays.toString(destinationArray));

        // 方法: currentTimeMillis()
        long currentTime = System.currentTimeMillis();
        System.out.println(currentTime);

        // 方法: gc()
        System.gc();

        // 方法: getenv(String name)
        String javaHome = System.getenv("JAVA_HOME");
        System.out.println("JAVA_HOME=" + javaHome);

        // 方法: getProperties()
        System.out.println("Properties=" + System.getProperties());

        // 方法: getProperty(String key)
        String osVersion = System.getProperty("os.version");
        System.out.println("os.version=" + osVersion);

        // 方法: getProperty(String key, String defaultValue)
        String javaVendor = System.getProperty("java.vendor", "Unknown");
        System.out.println("java.vendor=" + javaVendor);

        // 方法: load(String filename)
//        System.load("mylibrary.dll");

        // 方法: loadLibrary(String libname)
//        System.loadLibrary("mylibrary");

        // 方法: nanoTime()
        long startTime = System.nanoTime();
        // code here...
        long endTime = System.nanoTime();
        long executionTime = endTime - startTime;
        System.out.println("executionTime = " + executionTime);

        // 方法: runFinalization()
        System.runFinalization();

        // 方法: setErr(PrintStream err)
        System.setErr(System.err);

        // 方法: setIn(InputStream in)
        System.setIn(System.in);

        // 方法: setOut(PrintStream out)
        System.setOut(System.out);

        // 方法: setProperty(String key, String value)
        System.setProperty("my.property", "myValue");
        System.out.println("my.property=" +  System.getProperty("my.property"));

        // 方法: identityHashCode(Object x)
        Object myObject = new Object();
        int objectHashCode = System.identityHashCode(myObject);
        System.out.println("objectHashCode = " + objectHashCode);

        // 字段: in
        try {
            int read = System.in.read();
            System.out.println(read);
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 字段: out
        System.out.println("Hello, World!");

        // 字段: err
        System.err.println("Error occurred!");

        // 方法: exit(int status)
        System.exit(0);
        System.out.println("JVM已经停止运行,这里的代码执行不到...");
    }
}

程序运行结果如下:

[1, 2, 3, 4, 5]
1687942503061
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_162
Properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_202\jre\bin, java.vm.version=25.202-b08, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=C:\Users\86182\IdeaProjects\untitled15, java.runtime.version=1.8.0_202-b08, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_202\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\86182\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=C:\Program Files\Java\jdk1.8.0_202\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;D:\MyApp\;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath;c:\windows\system32;c:\windows;c:\windows\System32\Wbem;c:\windows\System32\WindowsPowerShell\v1.0\;c:\windows\System32\OpenSSH\;C:\Program Files\Java\jdk1.8.0_162\bin;C:\Program Files\Java\jdk1.8.0_162\jre\bin;D:\MyApp\TortoiseSVN\bin;*:\MyApp\dmdbms\bin;D:\MyApp\mysql-5.6.47-winx64\bin;C:\Program Files\Git\cmd;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\HP\Common\HPDestPlgIn\;D:\MyApp\NetSarang\;D:\MyApp\Python\Python311\Scripts\;D:\MyApp\Python\Python311\;C:\Users\86182\AppData\Local\Microsoft\WindowsApps;C:\Program Files (x86)\HP\Common\HPDestPlgIn\;D:\MyApp\JetBrains\IntelliJ IDEA 2021.2.3\bin;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\86182, user.timezone=, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=C:\Program Files\Java\jdk1.8.0_202\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar;C:\Users\86182\IdeaProjects\untitled15\out\production\untitled15;D:\MyApp\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar, user.name=86182, java.vm.specification.version=1.8, sun.java.command=com.xiaoshan.SystemExample, java.home=C:\Program Files\Java\jdk1.8.0_202\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_202, java.ext.dirs=C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_202\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_202\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_202\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}
os.version=10.0
java.vendor=Oracle Corporation
executionTime = 300
my.property=myValue
objectHashCode = 460141958

666
10
Hello, World!
Error occurred!

注意当程序运行到第69行int read = System.in.read();时,需要在console控制台输入数据,程序才会再继续往下执行结束。

3.2 使用技巧

System类在使用时存在以下使用技巧以及注意事项:

  • 在使用System类时,应注意避免滥用静态方法,以免导致代码难以维护和测试。推荐将与System类相关的逻辑封装到单独的模块中,以提高代码的可扩展性和可测试性;
  • System类中的方法多用于与底层系统交互,因此需要对每个操作的结果进行适当的检查和异常处理。

4️⃣ 应用场景

System类可以在多种场景下发挥重要作用:

  • 系统属性的获取和配置,如读取和设置环境变量、文件路径、编码等;
  • 外部命令的执行和控制,如调用系统命令行工具完成特定任务;
  • 监控程序和程序性能优化,通过测量程序运行时间和高效的数组复制等操作。

🌾 总结

System类是Java标准库提供的重要工具类,可用于访问与系统相关的操作、信息和资源。它提供了易于使用且跨平台的接口,使得开发者可以更方便地与底层系统进行交互。

合理并正确地使用System类,可以帮助实现更灵活、高效和可移植的Java应用程序。

【Java高级语法】(二十三)系统辅助工具类:解析System类,一个系统操作与资源管理工具类~-LMLPHP
06-29 03:17