java类分析_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等方法来调用,下面我们可以输入以下参数来获取系统信息。
然后使用代码测试以下几个比较典型的吧:
当然运行一下我们的控制台就有结果了:
在这里只是挑选了一部分进行测试,参数已经列出来了,其他的可以自己测。
三、常见操作
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相关推荐
- java 类数组_Java常用类-字符串、日期类、算法及数组工具类等
大家好,乐字节的小乐又和大家见面了.这次要给大家讲述的是Java常用类. 主要有以下知识点: Ø 字符串相关类(String .StringBuffer.StringBuilder) Ø 算法及数组工 ...
- java 常用类 练习_Java常用类之String类练习
1.编程. 已知字符串:"this is a test of java". 按要求执行以下操作: (1) 统计该字符串中字母s出现的次数 (2) 取出子字符串"test& ...
- java常用类总结_java——常用类的总结
packagetest;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.HashSet;importjava.uti ...
- Java并发包中常用类
Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来简单看一下相关的一些常见类的使用情况. 1.Concurren ...
- java零基础Ⅱ-- 4.常用类
java零基础Ⅱ-- 4.常用类 一.包装类 包装类的分类 包装类和基本数据的转换 演示 测试题 包装类型和String类型的相互转换 Integer类和Character类的常用方法 Integer ...
- Java并发包中常用类小结(一)
Java并发包中常用类小结(一) 从JDK1.5以后,Java为我们引入了一个并发包,用于解决实际开发中经常用到的并发问题,那我们今天就来 ...
- java中object类型_Java常用类object详解
1.Object概述: 类Object是类层次结构的根类.每个类都使用Object作为超类.所有对象(包括数组)都实现这个类的方法. 2.构造方法详细信息: Object只有一个无参构造方法,因为ob ...
- 时间日期类JAVA包含地区属性_Java常用类 | 时间和日期类
开发中经常涉及到时间与日期,记录下Java中与时间和日期相关的API JDK8之前与时间日期相关的类 java.lang.System类 System类提供了一个公共的静态方法currentTimes ...
- java常用class类_java常用类
java常用类 内部类 1.成员内部类:在一个类的内部定义一个完整的类 例如:外部类public class Body{ 内部类class Header{ } } 内部类可以直接访问外部类的私有成员, ...
- java常用类需要记吗_java 常用类
java 常用类库 Object 类:clone(), equals(), toString() Runtime 类:代表 java 程序的运行环境 定时器: Timer 和 TimerTask 类 ...
最新文章
- JAVA:this的使用
- maven安装、配置以及IDEA创建maven项目(Maven的Web项目)
- Dubbo 2.7三大特性详解
- 北京/苏州内推 | 微软STCA搜索广告算法团队招聘NLP算法工程师
- 数据可视化(BI报表的开发)第三天
- Android IPC 结篇
- C#笔记17 DataTime类型、断言、internal关键字、GUID、Excel操作、正则表达式、访问剪贴板、设计模式、版本控制
- Eigen问题解决:eigen_assert_exception’ is not a member of ‘Eigen’
- install-newton部署安装--------计算节点部署安装
- Linux下scp命令的用法,Linux中cp和scp命令的使用方法
- 2022数学建模美赛回顾
- 一篇文章学习完RabbitMQ
- iTunes Connect 上架 -- App store 搜索不到 解决方法
- C语言万年历输出月份,C语言输出万年历
- fhq——treap
- 郑州大学计算机系好请假吗,郑州大学网上信息
- vue工程展示数字动画组件vue animate-number的使用与填坑
- mac连不上wifi 未能加入wifi网络 请尝试靠近无线路由器,或者,运行“无限诊断”来排除故障
- 数仓拉链表使用_如何用拉链炸弹捍卫您的网站
- LeetCode 796. 旋转字符串