1、System类概述
System 类包含一些有用的类字段和方法。它不能被实例化。
2、成员方法
public static void gc():运行垃圾回收器
System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。 从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。 但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好。
public static void exit(int status):终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。
public static long currentTimeMillis():返回以毫秒为单位的当前时间
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length):注意这个命名是有误的,但是需要记住。从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束,注意是替换而不是插入。
举例1:
public class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "age=" + age + ", name=‘" + name + ‘\‘‘ + ‘}‘; } @Override protected void finalize() throws Throwable { System.out.println("当前对象被回收了,"+this); super.finalize(); } }
public class SystemDemo01 { public static void main(String[] args) { Person p = new Person(60,"赵雅芝"); System.out.println(p); p = null; System.gc(); } }
输出结果:
Person{age=60, name=‘赵雅芝‘}
当前对象被回收了,Person{age=60, name=‘赵雅芝‘}
举例2:
public class SystemDemo02 { public static void main(String[] args) { System.out.println("I love China"); System.exit(0); System.out.println("I love you"); } }
输出结果:
I love China
举例3:
public class SystemDemo03 { public static void main(String[] args) { long start = System.currentTimeMillis(); for (int x = 0; x < 100000; x++) { System.out.println("hello:" + x); } long end = System.currentTimeMillis(); System.out.println("共耗时:" + (end - start) + "毫秒"); } }
输出结果:
........
hello:99999
共耗时:2680毫秒
举例4:
public class SystemDemo04 { public static void main(String[] args) { int[] arr1 = {11,22,33,44,55}; int[] arr2 = {5,6,7,8,9,10}; System.arraycopy(arr1,1,arr2,2,2); System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
输出结果:
[11, 22, 33, 44, 55]
[5, 6, 22, 33, 9, 10]