从源码重新认识System类当中的常用方法

System类是包含一些有用的类字段和方法。 它是不能被实例化的(应为是final修饰的)

System类提供的是System包括标准输入,标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及用于快速复制阵列的一部分的实用方法。

System当中常用的方法 1. arraycopy()方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) Object src:表示原数组 int srcPos:表示原数组开始复制的位置 Object dest: 表示新数组 int destPos:表示型数组开始赋值的位置 int length:表示原数组共复制几位

这个方法在当时看String、StringBuffer和StringBuild源码的时候,就会发现都是在大量的调用这个方法的。 是因为在这个方法是直接调用的是最底层native方法的。效率是最高的了。

代码演示一下:

public class Demo01 {
          
   
    public static void main(String[] args) {
          
   
        int[] a = {
          
   1,2,3,4,5};
        int[] b = new int[10];
        System.arraycopy(a,0,b,0,a.length);
        System.out.println(Arrays.toString(b));
    }
}

2. currentTimeMillis()方法

public static long currentTimeMillis()

这个方法返回的是时间,返回的时间是以毫秒为单位的,所以它的返回值类型就规定为long类型。

在这里需要注意一下,虽然返回值的时间单位为毫秒,但该值的粒度取决于底层操作系统。 例如,许多操作系统以几十毫秒为单位测量时间。

这个返回具体的返回结果是:自1970年1月1日起到当前的世界差异

底层源码:(直接调用了系统的方法,得到时间)

这个方法主要的用处就是我们在之后的特别算法哪里,通过这个方法得到一块语句块的执行时间,从而方便让我们对自己的代码进行优化。 代码演示:

public class Demo02 {
          
   
    public static void main(String[] args) {
          
   
        long oldTime = System.currentTimeMillis(); //代码运行前获得一个时间
        //在这里就是要测试的代码执行块
        int a = 0;
        for (int i = 0; i < 1000000; i++) {
          
   
            a += i;
        }

        //最后利用前后时间差来得到代码运行时间
        System.out.println(System.currentTimeMillis() - oldTime);
    }
}

3. exit(int status)方法

public static void exit(int status)

传入的参数为状态码。 退出当前虚拟机。就是这个方法一执行,直接关闭虚拟机,就是强制退出程序。

先看一下源码:

在这说明一下,这个方法调用的Runtime类方法是从不正常执行的。所以必然停止虚拟机的。

代码演示:

public class Demo03 {
          
   
    public static void main(String[] args) {
          
   
        System.out.println("Xin");
        System.out.println("Chen");
        System.out.println("Yu");
        System.exit(0);
        System.out.println("Chen");
        System.out.println("Xi");
    }
}

4. gc()方法

public static void gc()

这玩意主要是用在垃圾收集的哪里,在后面的jvm哪里主要有说,这个想要说清除,首先要了解到java虚拟机的垃圾收集机制。 而调用gc方法就表明。java虚拟机就是尽力将所有的判断为垃圾进行回收。


最后在说一下System.in和System.out的区别:

public static final InputStream in “标准”输入流。 表示该流已经打开,准备提供输入数据。 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。
public static final PrintStream out “标准”输出流。 此流表示已经打开并准备好接受输出数据。 通常,此流对应于显示输出或由主机环境或用户指定的另一个输出目标。

对于简单的独立Java应用程序,编写一行输出数据的典型方法是:

System.out.println(data)

最后在这再给大家看一下api当中的System当中的方法


经验分享 程序员 微信小程序 职场和发展