概览

System类包含几个有用的类字段和方法。它不能被实例化。

主要功能

  • 标准输入、标准输出和错误输出流;
  • 访问外部定义的属性和环境变量;
  • 加载文件和库的一种方法;
  • 以及用于快速复制数组的一部分的实用程序方法。

image-20200406165757570

image-20200406165925445

无法实例化

public final class System {

    private static native void registerNatives();
    static {
        registerNatives();
    }

    /** Don't let anyone instantiate this class */
    // 任何人都不要实例化这个类
    private System() {
    }
}

标准输入、输出、错误流

// “标准”输入流。
// 这个流已经打开,可以提供输入数据了。
// 通常,这个流对应于键盘输入或主机环境或用户指定的另一个输入源。
public final static InputStream in = null;

// “标准”输出流。
// 这个流已经打开并准备接受输出数据。
// 通常,此流对应于显示输出或主机环境或用户指定的另一个输出目的地。
public final static PrintStream out = null;

// “标准”错误输出流。
// 这个流已经打开并准备接受输出数据。
// 通常,此流对应于显示输出或主机环境或用户指定的另一个输出目的地。
// 按照惯例,此输出流用于显示错误信息或其他信息,应及时关注用户
// 即使主要的输出流,变量的值,已被重定向到一个文件或其他目的地,通常不是连续监控。
public final static PrintStream err = null;
// 其他也一致,先执行checkIO()
public static void setOut(PrintStream out) {
    checkIO();
    setOut0(out);
}
private static void checkIO() {
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
        sm.checkPermission(new RuntimePermission("setIO"));
    }
}

访问系统属性

getProperty() - 获取系统属性

获取由指定键指示的系统属性。

public static String getProperty(String key) {
    checkKey(key);
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
        sm.checkPropertyAccess(key);
    }

    return props.getProperty(key);
}

getenv() - 获取指定环境变量

获取指定环境变量的值。环境变量是一个系统相关的外部命名值。

public static String getenv(String name) {
    SecurityManager sm = getSecurityManager();
    if (sm != null) {
        sm.checkPermission(new RuntimePermission("getenv."+name));
    }

    return ProcessEnvironment.getenv(name);
}

currentTimeMillis() - 返回当前时间(ms)

注意,虽然返回值的时间单位是毫秒,但是值的粒度取决于底层操作系统,并且可能更大。例如,许多操作系统以几十毫秒为单位测量时间。

public static native long currentTimeMillis();

identityHashCode() - 给定对象的散列代码

返回与默认方法hashCode()返回的相同的给定对象的散列代码,不管给定对象的类是否覆盖hashCode()。

public static native int identityHashCode(Object x);

gc() - 运行垃圾收集器

调用gc方法表明,Java虚拟机将精力花在回收未使用的对象上,以便使当前占用的内存能够快速重用。

public static void gc() {
    Runtime.getRuntime().gc();
}

exit() - 终止当前运行的Java虚拟机

终止当前运行的Java虚拟机。参数作为状态码; 根据惯例,非零状态码表示异常终止

public static void exit(int status) {
    Runtime.getRuntime().exit(status);
}

加载文件和库

load() - 加载类库

加载由filename参数指定的本机库。文件名参数必须是绝对路径名

@CallerSensitive
public static void load(String filename) {
    Runtime.getRuntime().load0(Reflection.getCallerClass(), filename);
}

快速复制数组某部分

arraycopy() - 复制数组

从指定的源数组(从指定位置开始**)复制数组到目标数组**的指定位置。

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);