JAVA常用类--System类
System类
System是一个在Java开发过程中最常见的一种系统类
- 主要特点:可以直接执行一些系统命令
- 例如:“System.out.println()"就是System类的一种功能
本次观察以下几个方法的使用:
方法名 | 类型 | 描述 |
---|---|---|
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | 普通 | 数组拷贝 |
public static long currentTieMillis() | 普通 | 获取当前的时间戳 |
public static void exit(int status) | 结束JVM进程,调用的是Runtime类中的exit()方法 | |
public static void gc() | 执行垃圾回收,调用的是Runtime类中的gc()方法 |
在使用System类时有一个十分重要的功能----统计某一个操作的耗时时间,即currentTieMillis()方法
- 这个方法可以获取放弃的时间戳
- 在某些操作前调用一次,执行之后调用一次,将两个结果相减即可得到程序执行的时间(耗时多少)
实例1:统计程序耗时
//System类
public class Application {
public static void main(String[] args) {
String massage = "ABC";
long start = System.currentTimeMillis();//在操作开始前获取时间戳
for (int i = 0; i < 9999; i++) {
massage += i;//修改字符串
}
long end = System.currentTimeMillis();//在操作开始后获取时间戳
System.out.println("本次程序执行时间为:" + (end - start));
}
}
运行结果如下:(注意:单位是毫秒)
本次程序执行时间为:500
以上程序的处理形式可以轻松的实现耗时的统计,该统计是直接写在程序内部,更高级的做法可以通过切面的形式来控制
实例2:观察程序的退出
在一个JVM进程运行的过程中,如果出现了某些问题,则可以通过exit()方法让JVM直接结束,而exit()并不是System类本身提供的方法,它是由Runtime类提供的!
情况一:无运行参数:
public class Application {
//2.观察程序的退出
public static void main(String[] args) {
if(args.length != 2){ //通过程序接收初始化参数
System.out.println("【错误】本程序执行时需要传递初始化运行参数,否则无法运行!");
System.out.println("【提示】可以按照以下方法输入参数:java Application 字符串 重复次数");
System.exit(1);//退出程序
}
String message = args[0];//获取一个参数内容
int count = Integer.parseInt(args[1]);//获取循环次数
//Integer.parseInt()将字符串参数转换为有符号的十进制参数
for (int i = 0; i < count; i++) {
System.out.println(message);
}
}
}
运行结果如下:
【错误】本程序执行时需要传递初始化运行参数,否则无法运行!
【提示】可以按照以下方法输入参数:java Application 字符串 重复次数
情况二:有运行参数:
- 输入参数:
运行结果如下:
www.abc.cn
www.abc.cn
www.abc.cn
实例3:通过System类的gc()进行垃圾回收
通过exit()方法可以在Java程序内部来决定当前整个JVM进程是否继续,System类也可以直接进行gc()方法的调用,实现垃圾回收!
public class Application {
//3.gc()实现垃圾回收
public static void main(String[] args) {
System.out.println("【1】垃圾产生之前的内存信息:FreeMemory = " + Runtime.getRuntime().freeMemory());
String message = "ABC";//定义字符串
for (int i = 0; i < 20; i++) {
message += message + i + "\n";//产生大量的垃圾
}
System.gc();//手工进行垃圾清除
System.out.println("【2】垃圾产生之后的内存信息:FreeMemory = " + Runtime.getRuntime().freeMemory());
}
}
运行结果如下:
【1】垃圾产生之前的内存信息:FreeMemory = 124193032
【2】垃圾产生之后的内存信息:FreeMemory = 148016216
此时程序代码通过System类实现哪里垃圾回收,但整个程序执行完毕之后由于整个JVM内存空间是系统默认分配的,所以执行完后空闲空间有所减少!!
注意:通过Runtime类和System类调用gc()方法,实现的效果是相同的