概览
System类
包含几个有用的类字段和方法。它不能被实例化。
主要功能
- 标准输入、标准输出和错误输出流;
- 访问外部定义的属性和环境变量;
- 加载文件和库的一种方法;
- 以及用于快速复制数组的一部分的实用程序方法。
无法实例化
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);
评论