简介:
- 主要用于获取系统的属性数据和其他操作,构造方法(私有的)
- 实际上 System 类是一些与系统相关属性和方法的集合,而且在System 类中所有的属性,都是静态的,要想引用这些属性和方法,直接使用 System 类调用即可。
常用方法:
方法名 | 说明 |
---|---|
static void arraycopy(...); |
复制数组 |
static long currentTimeMillis(); |
获取当前系统时间,返回毫秒值 (常用来计算一个程序执行时间) |
static void gc(); |
建议 jvm 赶快启动垃圾回收期器回收垃圾 |
static void exit(int status); |
退出 jvm 如果参数是 0 表示正常退出 jvm 非 0 表示异常退出 |
getProperties(); |
确定当前的系统属性。 |
getProperty(String key); |
获取系统某一属性。key - 系统属性的名称。 |
- 可以使用的 key 及其相关的描述。
键 | 相关值的描述 |
---|---|
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 | 用户的当前工作目录 |
- 实例 1:
System.arraycopy(src, srcPos, dest, destPos, length);
package com.base.demo05;
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) {
// 1.arraycopy(src, srcPos, dest, destPos, length)
/*
src-原数组
srcPos-从哪个位置开始复制0
dest-目标数组
destPos-目标数组的位置
length-复制的长度
*/
// 原数组
int[] arr = {12, 6, 30, 18, 22, 55, 98, 3, 36};
// 目标数组
int[] dest = new int[9];
// Arrays.copyOf(original, newLength); 实际调用 System.arraycopy();
System.arraycopy(arr, 0, dest, 0, arr.length); // 本地方法,效率高
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
}
}
- 实例 2:
package com.base.demo05;
public class Demo08 {
public static void main(String[] args) {
// 开始时间
long begin = System.currentTimeMillis();
int sum = 0;
for (int i = 0; i < 100000; i++) {
sum += i;
}
// 结束时间
long end = System.currentTimeMillis();
// 循环所用时间
System.out.println("用时:" + (end - begin) + "ms");
// 获取本机操作系统
System.out.println("操作系统的名称:" + System.getProperty("os.name"));
// 获取本机的全部环境属性
System.out.println(System.getProperties());
}
}
垃圾对象的回收
- Java 中用垃圾的自动收集机制,可以不定期地释放 Java 中的垃圾空间。在 System 类中有一个
System.gc();
方法,此方法可以进行垃圾的收集。
什么是垃圾对象?
- 一个对象,如果不再被任何栈内存所引用,那么此对象就可以称为垃圾对象,等待被回收。实际上,等待的时间是不确定的,所以直接调用
System.gc();
方法进行垃圾的回收。 - 提示:开发中的垃圾收集,基本上都是由系统自动完成的,除非特殊情况,一般很少直接去调用
System.gc();
方法。
- 实例:
package com.base.demo05;
public class Demo10 {
public static void main(String[] args) {
Student a = new Student("xiaoming", 10);
// 断开引用释放空间
a = null;
// 直接new,没用引用
new Student("lihua", 11);
// 进行垃圾回收
System.gc();
// 退出 JVM
System.exit(0);
// 已经退出 JVM,不会被执行
System.out.println("程序结束了!");
}
static class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return "姓名:" + name + " 年龄:" + age;
}
// 对象释放空间时默认调用此方法
// finalize() Java 8 以后弃用
public void finalize() throws Throwable {
// 直接打印对象调用toString
System.out.println("对象被释放:" + this);
}
}
}
- 运行结果
总结
- 在 System 类中的
currentTimeMillis();
方法,常用来计算一个程序执行的时间,非常实用。 - 通过 System 类中的
getProperties();
方法,不仅可以获取用户工作目录,还可以获取系统用户名。 - 关于
System.gc();
方法,不是调用这个方法,就一定会回收对象,具体还是由 JVM 确认(要判断是否为垃圾对象,如果不是垃圾对象,即使调用,也不会回收的)
网友评论