System
中代表程序所在系统,提供了对应的一些系统属性信息和系统操作。
System
类不能手动创建对象,因为构造方法被私有化(即被 private
关键字修饰),组织外界创建对象(即不能用 new
关键字生成一个对象)。System
类中的都是静态方法(static
关键字修饰),类名访问即可。在 JDK
中,有许多这样的类。在 System
类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。
1.1、currentTimeMillis 方法
获取当前系统时间与 1970年01月01
日 00:00
点之前的毫秒差值。
示例:
System.out.println("当前时间句距离 1970年01月01日00:00 之间差的毫秒值为:"+System.currentTimeMillis());
当然我们也可以使用它来测试程序的运行时间:
long start = System.currentTimeMillis();
int num = 0;
for (int i = 0; i < 100000000; i++) {
num += i;
}
long end = System.currentTimeMillis();
System.out.println("程序运行时间为:" + (end-start) + "毫秒。");
测试结果(不同机器上的运行结果可能不一样):
程序运行时间为:42毫秒。
1.2、getProperty 和 getProperties 方法
确定当前的系统属性。如果有安全管理器,则不带参数直接调用其 checkPropertiesAccess
方法。这可能导致一个安全性异常。
将 getProperty(String)
方法使用的当前系统属性集合作为 Properties
对象返回。如果没有当前系统属性集合,则先创建并初始化一个系统属性集合。这个系统属性集合总是包含以下键的值:
键 | 相关值的描述 |
---|---|
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 虚拟机实现名称 |
java.specification.version | Java 运行时环境规范版本 |
java.specification.vendor | Java 运行时环境规范供应商 |
java.specification.name | Java 运行时环境规范名称 |
java.class.version | Java 类格式版本号 |
java.class.path | Java 类路径 |
java.library.path | 加载库时搜索的路径列表 |
java.io.tmpdir | 默认的临时文件路径 |
java.compiler | 要使用的 JIT 编译器的名称 |
java.ext.dirs | 一个或多个扩展目录的路径 |
os.name | 操作系统的名称 |
os.arch | 操作系统的架构 |
os.version | 操作系统的版本 |
file.separator | 文件分隔符(在 UNIX 系统中是“/”) |
path.separator | 路径分隔符(在 UNIX 系统中是“:”) |
line.separator | 行分隔符(在 UNIX 系统中是“/n”) |
user.name | 用户的账户名称 |
user.home | 用户的主目录 |
user.dir | 用户的当前工作目录 |
示例(不同的系统,所看到的信息是不同的):
// 获取系统的所有属性
System.out.println(System.getProperties());
// 获取系统指定的属性
System.out.println(System.getProperty("java.version"));
1.3、arrayCopy 方法
arrayCopy()
用来实现将源数组部分元素复制到目标数组的指定位置。
使用方法:System.arrayCopy(Object srcArray,int srcPos,Object destArray ,int destPos,int length)
。
字段解释:
Object srcArray
原数组(要拷贝的数组)。int srcPos
要复制的原数组的起始位置(数组从0
位置开始)。Object destArray
目标数组。int destPos
目标数组的起始位置。int length
原数组的长度。
下面的代码,将数组 arr2
中的数据,放到了数组 arr1
的尾部,替换了 1
,2
,3
:
int[] arr1 ={5,6,7,0,6,6,1,2,3};
int[] arr2 ={12,14,67};
System.arraycopy(arr2, 0 , arr1, 6 , 3);
System.out.print("复制后数组arr1的值为:");
for (Integer a : arr1){
System.out.print(a+" ");
}
上述代码的执行结果为:
复制后数组arr1的值为:5 6 7 0 6 6 12 14 67
1.4、其他方法
System
中的其他方法介绍如下表:
方法 | 描述 |
---|---|
clearProperty() | 移除指定键指示的系统属性。 |
console() | 返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。 |
exit() | 终止当前正在运行的 Java 虚拟机。 |
gc() | 运行垃圾回收器。 |
getenv() | 返回一个不能修改的当前系统环境的字符串映射视图。 |
getSecurityManager() | 获取系统安全接口。 |
identityHashCode() | 返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()。 |
inheritedChannel() | 返回从创建此 Java 虚拟机的实体中继承的信道。 |
load() | 从作为动态库的本地文件系统中以指定的文件名加载代码文件。 |