在写Java代码的时候,我们最常用的一句就是System.out.println()。那么System类中还有什么其他常用的方法吗?
答案肯定是有的,不过再看方法前,我们先来看一下System本身:
java.lang
类 System
- java.lang.Object
-
- java.lang.System
-
public final class System extends Object
The
System
class contains several useful class fields and methods. It cannot be instantiated.
public final class System {
private System() {
}
}
通过API和取出的这部分代码,我们不难有几点发现:
1. System在java.lang中,这也就意味着System可以不用导包就能直接使用。
2.System是继承自Object类的final 类,即System不能被继承。
3.System的构造方法设置为private,因此"It cannot be instantiated"他不能被实例化。即所有System的方法都要通过System类来调用。
然后再来看看它包含的几个方法。
1. static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
灵活的复制数组,从src源数组中下标srcPos处开始复制长度为length子序列,放到下标从destPos开始的dest目标数组中。
Object src:源数组
int srcPos:源数组开始索引下标
Object dest:目标数组
int destPos:目标数组开始索引下标
int length:指定接受的元素个数
private static void method1() {
char []src={'a','b','c','d','e'};
char []dest=new char[5];
System.arraycopy(src, 0, dest, 0, 5);
for(char i:dest)
System.out.print(i+" ");
//output:a b c d e
System.arraycopy(src, 2, dest, 3, 2);
for(char i:dest)
System.out.print(i+" ");
//output:a b c c d
}
2. static long currentTimeMillis()
返回1970年1月1日 00:00:00 到现在时间的毫秒数 ,1s=1000ms
例如,1970年1月1日 00:00:01 返回1000
1970年1月1日 00:01:00 返回1000*60
1970年1月1日 01:00:00 返回1000*60*60
通常用于计算程序的运算时间,看代码:
private static void method2() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
3. static void exit(int status)
根据状态吗status结束Java虚拟机,一般非0表示异常终止。
private static void method3() {
for (int i = 0; i < 1000; i++) {
System.out.println(i);
if (i == 100)
System.exit(0);
}
}
4. static void gc()
Java一般是自动调用垃圾回收器,当然我们也可以手动调用,调用的方式就是通过System.gc()。System.gc()会尽最大努力回收垃圾,不一定会成功。
Object类中有一个finalize()方法,可以在类中对它进行覆写,当该类的对象被垃圾回收器回收或调用gc()回收之后会调用该方法。
class Person {
@Override
protected void finalize() throws Throwable {
System.out.println("回收已执行");
}
}
public class SystemDemo{
public static void main(String[] args) {
new Person();
System.gc();
}
程序运行时,不一定每次都能回收Person对象,因此不是每次都有输出的。