System类

1.如果计算某个代码的执行时间
2.进行垃圾收集操作

之前使用的system.out.println()就属于System类的功能,由于涉及到了IO,我们留到以后继续讲解。

在System类里面有一个重要方法:
取得当前系统时间:
public static long currentTimeMills();

范例:请统计出某项操作的执行时间。



public class TestDemo{
    
    public static void main(String[] args)throws Exception{
        long start=System.currentTimeMillis();//取得开始时间
        String str="";
        for (int i = 0; i < 3000; i++) {
            str+=i;
        }
        long end=System.currentTimeMillis();//取得结束时间
        System.out.println("cost time:"+(end-start));
    }   
}
image.png

30毫秒。
如果要想统计出所花费的毫秒时间,就用long型数据直接数学运算得来。

在System类里面定义了一个方法,public static void gc();
调用System的gc等价于间接调用Runtime类中的gc方法。

对象产生一定会调用构造方法,可以进行一些处理操作,但是某一个对象如果要被回收了,如果需要给对象一个收尾的机会,那么就可以考虑覆写Object类中finalize()方法。
protected void finalized() throws Throwable
protected修饰的 同一包的类或者是不同包的子类
throwable在对象回收时,就算抛出了任何异常,也不影响程序的执行。


class Member{

    public Member(){
        System.out.println("birth");
    }
    @Override
    protected void finalize() throws Throwable {
    
        System.out.println("death");
        throw new Exception("I will back");
    }
}

public class TestDemo{
    
    public static void main(String[] args) throws Exception{
        Member member=new Member();
        mem=null;
        System.gc();
    }   
}

由于覆写了Object类的finalize方法,所以在生命周期结束时,必定执行此方法。(在C++中叫析构函数),构造方法是用于对象初始化,而finalize方法是留给对象回收前使用的。

面试题:情节是final,finally,finalize的区别?
final:关键字,定义不能被继承的类,不能被覆写的方法/常量,也叫终结器。
finnally:关键字,异常的统一出口。
finalize:Object类提供方法(protected void finalize() throws Throwable)指的是对象回收前的收尾方法。即使出现了异常也不会导致程序中断执行。

总结:

System类可以使用currentTimeMills()方法获取系统当前时间
System的gc方法相当于Runtime的gc方法的间接调用

你可能感兴趣的:(System类)