深入分析java中的System类

System是一个类,这个System类主要是一些与系统相关的属性和方法的集合,而且其内部的方法全部是静态的,所以我们直接使用System直接调用就好,比如我们常用的一个System.out.print 。这篇文章我们就来分析一下System类 。
一、System概述
System就是系统的意思 。因此它的主要操作肯定也是和系统信息有关 。这个类位于JAVA.lang包 。可能我们都有一个疑惑,我们从来没见过System被实例化,这是因为System类内部的构造函数是私有的,在外部不能访问,因此也就不能被实例化了 。
他主要有如下功能:
(1)系统信息的访问,如外部属性和环境变量等
(2)垃圾回收相关操作
(3)标准输入输出
(4)比较常用的其他操作,比如数组拷贝
接下来我们就对这些功能进行一个测试与描述:
二、System功能演示
1、获取设置属性方法
也就是说我们的System如何获取系统的属性,或者说是调用哪个方法获取属性 。
(1)contains(Object value)、containsKey(Object key):判断给定的参数或属性关键字在属性表中有定义,返回True或者False;
(2)getProperty(String key)、getProperty(String key, String default):根据参数获取属性
(3)list(PrintStream s)、list(PrintWriter w): 在输出流中输出属性表内容;
(4)size():返回当前属性表中定义的属性关键字个数 。
我们当然可以设置属性:
(1)put(Object key, Object value) :向属性表中追加属性关键字和关键字的值;
(2)remove(Object key) :从属性表中删除关键字 。
2、获取系统属性
上面我们可以直接使用System.contains等方法来调用,下面我们可以输入以下参数来获取系统信息 。

深入分析java中的System类

文章插图
 

深入分析java中的System类

文章插图
 

深入分析java中的System类

文章插图
 
然后使用代码测试以下几个比较典型的吧:
深入分析java中的System类

文章插图
 
当然运行一下我们的控制台就有结果了:
深入分析java中的System类

文章插图
 
在这里只是挑选了一部分进行测试,参数已经列出来了,其他的可以自己测 。
三、常见操作
1、拷贝数组arraycopy
深入分析java中的System类

文章插图
 
【深入分析java中的System类】2、获取系统时间
深入分析java中的System类

文章插图
 
四、垃圾回收相关操作:System.gc
这句话表明运行了垃圾回收器 。java虚拟机会回收一下系统垃圾,比如说没有使用的对象 。
深入分析java中的System类

文章插图
 
我们看一下运行结果再来分析
深入分析java中的System类

文章插图
 
我们可以看到,在进行完垃圾回收之后,再输入User相关信息时由于找不到对象,因此报了空指针异常 。
我们进入到System.gc内部看一下,看看内部执行了什么操作,
深入分析java中的System类

文章插图
 
在这里我们可以看到其实是执行了Runtime的垃圾回收操作 。我们在进入会发现其实垃圾回收就是Runtime做的 。
五、源码分析
1、初始化
我们进入到System的源码中,可以看到首先由这样的描述:
深入分析java中的System类

文章插图
 
上面是什么意思呢?
首先:registerNatives()方法是一个入口方法,注册成了natives,也就是说该方法会令vm通过调用initializeSystemClass方法来完成初始化工作 。
然后:构造函数被设置成private,说明我们不能实例化这个类,注释也已经说明了 。
既然System初始化的操作是通过initializeSystemClass,我们不如进入到这个类中去看看 。
深入分析java中的System类

文章插图
 
通过initializeSystemClass,我们已经能够明白System是如何初始化的,对于每一步,我们可以继续深入下去观察其具体实现,在这里就不赘述了 。
2、类属性
类属性其实主要是输入输出流


推荐阅读