知识点:
1.如何计算某个代码的执行时间。
2.进行垃圾收集操作。
具体内容(了解):
之前使用的”System.out.println()“就属于System类的操作功能。另外还有一个System.arraycopy()方法实现数组拷贝,而这个方法的真实定义如下:public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
在System类里面定义有一个重要的方法:
- 取得当前的系统时间:public static long currentTimeMillis()
范例:请统计某项操作的执行时间
package 算法;
import java.io.IOException;
public class TestDemo {
public static void main(String args[]) throws IOException, InterruptedException{
long start = System.currentTimeMillis();
String str = "";
for(int x=0;x<3000;x++){
str +=x;
}
long end = System.currentTimeMillis();
System.out.println("本次操作所花费的时间:"+(end-start));
}
}
如果想统计出花费的毫秒实践,就用long型数据直接进行数据计算后得来。
在System类里面定义勒一个操作方法:public static void gc(),这里的GC()其实就是间接调用了Runtime里面的gc()方法。
对象产生一定会调用构造方法,可以进行一些处理操作,但是某一个对象如果要被回收了,那么连一个收尾的机会都没有。如果要给一个收尾的机会,那么久可以考虑覆写Object类中的finalize()方法完成。
package 算法;
class Member{
public Member(){
System.out.println("噼里啪啦,祸害诞生了!");
}
}
public class TestDemo {
public static void main(String args[]){
Member mem = new Member(); //会出现一些出生时的辅助操作
mem = null; //会产生垃圾
}
}
finalize()方法定义:protected void finalize() throws Throwable(Throwable是异常处理的最大父类)
在对象回收时就算抛出勒任何的异常,也不会影响到整个程序的正常运行。
package 算法;
class Member{
public Member(){
System.out.println("噼里啪啦,祸害诞生了!");
}
@Override
protected void finalize() throws Throwable {
System.out.println("祸害死了!");
throw new Exception("老子十八年后继续祸害全世界,于是自己死了!");
}
}
public class TestDemo {
public static void main(String args[]){
Member mem = new Member(); //会出现一些出生时的辅助操作
mem = null; //会产生垃圾
System.gc(); //手工处理垃圾收集
}
}
构造方法是留给对象初始化时使用的,而finalize()方法是留给对象回收前使用的。
面试题:请解释final、finally、finalize的区别?
- final:关键字,定义不能被继承的类,不能被覆写的方法,常量。
- finally:关键字,异常的统一出口。
- finalize方法,Object类提供的方法。protected void finalize() throws Throwable指的是对象回收前的收尾方法,即时出现异常也不会导致程序中断执行。
总结:
1.System类可以使用currentTimeMillies()方法取得当前的系统时间;
2.System类中的gc()方法就直接调用了“Runtime.getRuntime().gc()”