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()方法,实现的效果是相同的

posted @ 2024-03-11 23:19  月亮警察  阅读(34)  评论(0编辑  收藏  举报