System类
这个类可能是你最经常看见的类,如系统输出语句
System.out.println()
,但是它到底是个什么呢?一起通过这篇文章来学习System类吧!😆
实际上System类是一些与系统相关属性和方法的集合,而且在System类中所有的属性都是静态的,要想引用这些属性和方法,直接使用System类调用即可。
常用方法
方法 | 描述 |
---|---|
exit ( int status ) | 终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。 |
gc () | 运行垃圾回收器。调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。 |
arraycopy(Object src, int srcPos, Object dest, int destPos,int length) | 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。 src - 源数组。 srcPos - 源数组中的起始位置。 dest - 目标数组。 destPos - 目标数据中的起始位置。 length - 要复制的数组元素的数量。 |
currentTimeMillis() | 返回以毫秒为单位的当前时间。(常用来计算一个程序执行时间) |
getProperties() | 确定当前的系统属性。 |
getProperties(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 | 用户的当前工作目录 |
代码
public class Main {
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类中有一个gc()
方法,此方法可以进行垃圾的收集。
什么是垃圾对象?
一个对象如果不再被任何栈内存所引用,那么此对象就可以称为垃圾对象,等待被回收。实际上,等待的时间是不确定的,所以直接调用System.gc()
方法进行垃圾的回收。
提示:开发中的垃圾收集基本上都是由系统自动完成的,除非特殊情况,一般很少直接去调用gc()
方法
代码
public class Main {
public static void main(String[] args) {
Student a=new Student("xiaoming",10);
a=null;//断开引用释放空间
new Student("lihua",11);//直接new,没用引用
System.gc();//进行垃圾回收
}
}
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;
}
public void finalize()throws Throwable{//对象释放空间时默认调用此方法
System.out.println("对象被释放:"+this);//直接打印对象调用toString
}
}
运行结果
总结
- 在System类中的
currentTimeMillis()
方法,常用来计算一个程序执行的时间,非常实用。 - 通过System类中的
getProperties()
方法,看结果就知道有多厉害,不仅可以获取用户工作目录,还可以获取系统用户名(懂的都懂)。 - 关于
gc()
方法,不是掉用这个方法就一定会回收对象,具体还是由JVM说的算(要判断是否为垃圾对象,如果不是垃圾对象,即使调用,也不会回收的)