从源码重新认识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当中的方法
在这里插入图片描述


这篇文章写的也比较简单,我觉的在System这里的方法都比较简单,但是大家在看的时候有什么问题的话,欢迎大家在评论区讨论。有什么好的建议,我也会在后面进行补充之类的。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值