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等方法来调用,下面我们可以输入以下参数来获取系统信息。

然后使用代码测试以下几个比较典型的吧:

当然运行一下我们的控制台就有结果了:

在这里只是挑选了一部分进行测试,参数已经列出来了,其他的可以自己测。

三、常见操作

1、拷贝数组arraycopy

2、获取系统时间

四、垃圾回收相关操作:System.gc

这句话表明运行了垃圾回收器。java虚拟机会回收一下系统垃圾,比如说没有使用的对象。

我们看一下运行结果再来分析

我们可以看到,在进行完垃圾回收之后,再输入User相关信息时由于找不到对象,因此报了空指针异常。

我们进入到System.gc内部看一下,看看内部执行什么操作

在这里我们可以看到其实是执行了Runtime的垃圾回收操作。我们在进入会发现其实垃圾回收就是Runtime做的。

五、源码分析

1、初始化

我们进入到System的源码中,可以看到首先由这样的描述:

上面是什么意思呢?

首先:registerNatives()方法是一个入口方法,注册成了natives,也就是说该方法会令vm通过调用initializeSystemClass方法来完成初始化工作。

然后:构造函数被设置成private,说明我们不能实例化这个类,注释也已经说明了。

既然System初始化的操作是通过initializeSystemClass,我们不如进入到这个类中去看看。

通过initializeSystemClass,我们已经能够明白System是如何初始化的,对于每一步,我们可以继续深入下去观察其具体实现,在这里就不赘述了。

2、类属性

类属性其实主要是输入输出流

3、类方法

在这里肯定不能所有的方法都讲一遍,在这里列举几个比较重要的方法。

(1)getProperty:获取系统属性

我们在这里发现,其实获取属性的操作最关键的就是最后一句props.getProperty(key)。我们进入到这个方法看看:

也就是说其实是 一直是回调defaults.getProperty(key),让父类一直不停的去调用。最后返回一个String。

(2)checkKey:校验key

里面很简单就是看看是否为空。

(3)setProperties:设置系统属性

最核心的就是最后一行,但是前面首先检验了是否是系统安全的属性,而且也根据这个属性初始化了一次。我们进入initProperties。

这是一个native方法。

(4)exit():退出当前的jvm

其实调用的也是runtime的退出方法。

(5)其他方法

我们会发现经常操作的这些方法其实也是native的。

(6)安全管理机制

与之相关的方法有三个

第二个:

还有最后一个

OK。源码分析也就先说到这里,对于System类要知道其基本的内部实现以及常用的操作即可。

公众号:java的架构师技术栈,获取更多教程和资源文章

java类分析_java常用类系列之System相关推荐

  1. java 类数组_Java常用类-字符串、日期类、算法及数组工具类等

    大家好,乐字节的小乐又和大家见面了.这次要给大家讲述的是Java常用类. 主要有以下知识点: Ø 字符串相关类(String .StringBuffer.StringBuilder) Ø 算法及数组工 ...

  2. java 常用类 练习_Java常用类之String类练习

    1.编程. 已知字符串:"this is a test of java". 按要求执行以下操作: (1) 统计该字符串中字母s出现的次数 (2) 取出子字符串"test& ...

  3. java常用类总结_java——常用类的总结

    packagetest;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.uti ...

  4. Java并发包中常用类

    Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...

  5. java零基础Ⅱ-- 4.常用类

    java零基础Ⅱ-- 4.常用类 一.包装类 包装类的分类 包装类和基本数据的转换 演示 测试题 包装类型和String类型的相互转换 Integer类和Character类的常用方法 Integer ...

  6. Java并发包中常用类小结(一)

                                   Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来 ...

  7. java中object类型_Java常用类object详解

    1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...

  8. 时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类

    开发中经常涉及到时间与日期,记录下Java中与时间和日期相关的API JDK8之前与时间日期相关的类 java.lang.System类 System类提供了一个公共的静态方法currentTimes ...

  9. java常用class类_java常用类

    java常用类 内部类 1.成员内部类:在一个类的内部定义一个完整的类 例如:外部类public class Body{ 内部类class Header{ } } 内部类可以直接访问外部类的私有成员, ...

  10. java常用类需要记吗_java 常用类

    java 常用类库 Object 类:clone(), equals(), toString() Runtime 类:代表 java 程序的运行环境 定时器: Timer 和 TimerTask 类 ...

最新文章

  1. JAVA:this的使用
  2. maven安装、配置以及IDEA创建maven项目(Maven的Web项目)
  3. Dubbo 2.7三大特性详解
  4. 北京/苏州内推 | 微软STCA搜索广告算法团队招聘NLP算法工程师
  5. 数据可视化(BI报表的开发)第三天
  6. Android IPC 结篇
  7. C#笔记17 DataTime类型、断言、internal关键字、GUID、Excel操作、正则表达式、访问剪贴板、设计模式、版本控制
  8. Eigen问题解决:eigen_assert_exception’ is not a member of ‘Eigen’
  9. install-newton部署安装--------计算节点部署安装
  10. Linux下scp命令的用法,Linux中cp和scp命令的使用方法
  11. 2022数学建模美赛回顾
  12. 一篇文章学习完RabbitMQ
  13. iTunes Connect 上架 -- App store 搜索不到 解决方法
  14. C语言万年历输出月份,C语言输出万年历
  15. fhq——treap
  16. 郑州大学计算机系好请假吗,郑州大学网上信息
  17. vue工程展示数字动画组件vue animate-number的使用与填坑
  18. mac连不上wifi 未能加入wifi网络 请尝试靠近无线路由器,或者,运行“无限诊断”来排除故障
  19. 数仓拉链表使用_如何用拉链炸弹捍卫您的网站
  20. LeetCode 796. 旋转字符串

热门文章

  1. OSPF综合实验(有点难哦!)
  2. idea toolbar靠右显示
  3. web 开发安全性问题
  4. MySQL语句语法参考
  5. RedHat 安装 CentOS yum
  6. android147 360 程序锁
  7. 夜,思考——我想要的到底是什么?
  8. EF Code First 学习笔记:表映射
  9. 【Android每日一讲】2012.11.08 Android 多语系支持 -- Locale与Configuration
  10. 初窥JQuery(二)-事件机制(1)