java基础--18 System类常用方法


System类包含一些有用的类字段和方法,他不能被实例化
该类中包含的方法:

public static void gc() :运行垃圾回收器
public static void exit(int status) :终止当前正在运行的Java虚拟机。参数用作状态码,根据惯例,非0状态码表示异常终止
public static void currentTimeMillis() :返回以毫秒为单位的当前时间
public static void arraycopy(Object src, int srcPos,int destPos,int length) :运行垃圾回收器

1. System.gc()方法举例


System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。

finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。

从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。

但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好

举例:

----------------Person 类----------------------------

public class Person {
    private String name;
    private int age;

    public Person() {
        super();
    }

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("当前的对象被回收了" + this);
        super.finalize();
    }

}

-------------SystemDemo 测试类---------------------------
/*
 * System类包含一些有用的类字段和方法。它不能被实例化。 
 * 
 * 方法:
 *      public static void gc():运行垃圾回收器。 
 *      public static void exit(int status)
 *      public static long currentTimeMillis()
 *      public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
 */
public class SystemDemo {
    public static void main(String[] args) {
        Person p = new Person("赵雅芝", 60);
        System.out.println(p);

        p = null; // 让p不再指定堆内存
        System.gc();
    }
}

运行结果:

Person [name=赵雅芝, age=60]
当前的对象被回收了Person [name=赵雅芝, age=60]

解释:

从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。

2. System.exit使用方法举例

public class SystemDemo {

    public static void main(String[] args) {
        System.out.println("我们喜欢林青霞(东方不败)");
        //从这里直接终止程序
        System.exit(0);
        System.out.println("我们喜欢赵雅芝(白娘子)");
    }

}

运行结果:

我们喜欢林青霞(东方不败)

3.System.currentTimeMills()使用方法

需求:计算一段程序运行的时间

    public static void main(String[] args) {

        long start = System.currentTimeMillis();
        for(int x=0;x<500;x++){
            System.out.println("hello"+x);
        }
        long end = System.currentTimeMillis();

        System.out.println("共耗时"+(end-start)+"毫秒");
    }

运行结果:

hello0
hello1
hello2
...
hello497
hello498
hello499
共耗时10毫秒

4.System.arraycopy()使用方法

        // 定义数组
        int[] arr = { 11, 22, 33, 44, 55 };

        int[] arr2 = { 6, 7, 8, 9, 10 };
        /**
         * 方法含义:
         * public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
         *  从指定原数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
         * src:源数组
         * srcPos:原数组的开始位置
         * dest:目标数组
         * destPos:目标数组的开始位置
         * length:复制长度
         */
        System.arraycopy(arr, 1, arr2, 2, 2);

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));

运行结果:

[11, 22, 33, 44, 55]
[6, 7, 22, 33, 10]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值