System类学习笔记
最近在学习源码的过程中发现:很多深层次的代码都用到了一个类System类,所以决定对System类一探究竟
本文先对System类进行了剖析,然后对System类做了总结
一.首先对该类的中的所有字段和方法进行了阅读,做好了中文翻译笔记,如下:
System类学习笔记:
1.最终类public final class System 这是一个final类,不允许继承
2.私有构造器private System((){} 构造器被私有化,不允许创建对象
3.静态代码块static{registerNatives();} 里面有个静态代码块,在加载这个类后最先执行其中的registerNatives()方法,该方法是native方法,无法继续下探
4.静态常量InputStream in 与键盘等输入设备绑定,等待接受内容
5.静态常量PrintStrem out 与显示器等输出设备绑定,等待输出内容
6.静态常量PrintStream err 与out相似,只不过专用于错误信息输出
7.私有静态易变字段SecurityManager securitySystem的安全管理器
8.静态方法setIn 替换输入源,即:不再接受键盘输入
9.静态方法setOut 替换输出源,即:不再向显示器输出
10.静态方法setErr 替换输出源:同上
11.静态方法console 获取关联了当前java虚拟机的唯一console对象
12.静态方法inheritedChannel 获取一个通道,该通道是继承了java虚拟机创建实体的通道
13.私有静态方法checkIO 检查是否有权限去重新分配输入输出源
14.私有静态本地方法setIn0,setOut0,setErr0 供setIn,setOut,setErr调用的本地方法
15.静态方法setSecurityManager 替换安全管理器
16.私有静态上锁方法setSecurityManager0 供setSecurityManager方法调用
17.静态方法getSecurityManager 获取安全管理器
18.静态本地方法currentTimeMillis 获取时间戳的毫秒时间,一般以毫秒为单位
19.静态本地方法nanoTime 获取纳秒,通常只用于java虚拟机,不用于外部
20.静态本地方法arraycopy 从源数组的指定位置开始复制指定个元素到目标数组的指定位置
21.静态本地方法identityHashCode 返回一个对象的唯一hash码,如果对象是null返回0
22.私有静态字段Properties props java版本/HOME/分隔符/路径等系统信息集合
23.私有静态本地方法initProperties 用于初始化props
24.静态方法getProperties 返回System的属性集props,如果没有则会先创建并初始化一个
25.静态方法lineSeparator 获取字符串形式的换行符\r\n或\n
26.私有静态字段lineSeparator 换行符
27.静态方法setProperties 设置/替换系统属性集,如果没有则初始化一个
28.静态方法getProperty(key) 根据key获取属性
29.静态方法getProperty(key,defaultValue) 根据key获取属性的重载方法,如果没有返回defaultValue
30.静态方法setProperty 设置/替换键为key的属性值,返回旧值/null
31.静态方法clearProperty 根据key移除属性,返回旧值/null
32.静态方法checkKey 检查key,如果为空字符串或null,抛异常!用于需要输入key的方法
33.静态方法getenv(String name) 根据name获取环境变量(相比于系统属性Property,环境变量是作用域更大的属性,不同操作系统有所差异,所以一般不用它,而用Property)
34.静态方法getenv() 获取环境变量集合(重载方法)
35.静态方法exit 终止java虚拟机,并设置一个状态码
36.静态方法gc 回收不再使用的对象,腾出内存,以便复用
37.静态方法runFinalization 回收那些不再使用的对象
38.静态方法load 根据文件名加载本机库
39.静态方法loadLibrary 根据库名加载本机库
40.静态本地方法mapLibraryName 将库名映射到一个字符串上,该字符串与平台相关,且代表本机库
41.静态方法newPrintStream 根据编码创建标准输出流
42.私有静态方法initializeSystemClass 初始化System(就是调用上述方法们)
二.总结
1.System类是一个最终类,没有类可以继承它
2.System类也是一个无法创建对象的类,而且自身也没有保留一个实例,所以我们使用它都是通过System.方法名的方式,也因此,System类中所有的字段和方法都是静态static的,很少有类的所有方法都是全静态,System就是这种特殊的类.
3.System类中有一个静态代码块,是在System类所有方法之前就已经被执行,注册本地方法,可能与操作系统方法有关.
4.System类中已经定义好了现成的输入输出流,可以直接使用默认的输入输出源,当然也可以通过setIn/setOut等方法改变输入输出源.
5.System类可以操作securityManager,有对应的get/set方法,可以获取/替换安全管理器.
6.System类可以操作Properties,有对应的get/set方法,可以获取/替换属性集.
7.System类可以操作Property,有对应的get/set方法,可以获取/替换某个属性.还有clearProperty(String key)方法,可以移除某个属性.
8.System类可以直接获取到任意一个key的hashCode,且对于相同的key只有相同的hashCode,对于不同的key可能具有相同的hashCode(hash碰撞)
9.System类可以直接获取到系统时间,以1970年至今的毫秒数表示
10.System类可以直接将一个数组中的某段元素拷贝到新数组的指定位置处.
综上:System类是一个孤独的类,既不能创建对象,也没有子类,System常用的操作的获取系统时间,标准输入输出流,拷贝数组,获取系统属性这些方法.
System类学习笔记的更多相关文章
- system generator学习笔记【02】
作者:桂. 时间:2018-05-20 23:28:04 链接:https://www.cnblogs.com/xingshansi/p/9059668.html 前言 继续学习sysgen.接触s ...
- zt C++ list 类学习笔记
C++ list 类学习笔记 分类: C++ 2011-09-29 00:12 7819人阅读 评论(0) 收藏 举报 listc++iteratorvectorcconstructor 双向循环链表 ...
- GUI学习之五——QAbstractButton类学习笔记
今天总结一下AbstractButton类的学习笔记. 一.描述 AbstractButton是对各种按键的抽象类他的继承关系是这样的 首先,QAbstractButton继承了QWidget类的各种 ...
- Java常用类学习笔记总结
Java常用类 java.lang.String类的使用 1.概述 String:字符串,使用一对""引起来表示. 1.String声明为final的,不可被继承 2.String ...
- java.util.Properties类 学习笔记
学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...
- system generator学习笔记【01】
作者:桂. 时间:2018-05-18 18:26:50 链接:http://www.cnblogs.com/xingshansi/p/9045914.html 前言 学习使用system gene ...
- Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记
Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...
- ThreadLocal类学习笔记
这个类在java1.2中就出现了,线程独有的变量(每个线程都有一份变量),使用它的好处之一就是可以少传许多参数. 在哪里用到它呢?有连接池的地方就有它的身影,连接池包括数据库连接池,网络连接池等. i ...
- File类学习笔记
File类 首先,要明确的一点就是,在整个IO包中,唯一表示与文件有关的类局势File类. 它可以实现创建或删除文件等操作.下面看看它的构造方法: File(String pathname) 通过将给 ...
随机推荐
- 传统企业IT为什么对微服务叶公好龙的心态?(转)
这两年来,“微服务”.“云计算”.“大数据”.“人工智能”的概念在IT界成了新的宠儿:珠联壁合.声名远播.势如破竹.如日中天!从实践落地的情况来看:微服务诞生于互联网,当然是首先在互联网界遍地开花,高 ...
- AIX中PV,VG,LV及FS常用相关命令
1.PV常用相关命令 1)lsdev:列出ODM(Object Data Manager)中的设备. 2)chdev:修改一个AIX设备的属性. 3)mkdev:创建一个AIX设备. 4)chpv:修 ...
- CentOS 7上安装Pure-FTPd
# 安装 yum install epel-release yum install pure-ftpd 位置文件位于/etc/pure-ftpd/pure-ftpd.conf # 修改配置文件 # 注 ...
- Python爬虫之requests
爬虫之requests 库的基本用法 基本请求: requests库提供了http所有的基本请求方式.例如 r = requests.post("http://httpbin.org/pos ...
- SVN 常见报错
1.svn is out of date 出错原因:SVN服务器端的版本比你的版本要新,不允许提交. 解决方案1:右键你所要提交的文件,team-->update 更新最新版本 然后再提 ...
- Win10系列:C#应用控件基础21
ListView控件 ListView控件的常用方式是与后台数据进行绑定,并将所绑定的数据内容与前端界面布局相结合,按照特定的顺序将数据集合以列表形式展示在界面当中,如电子邮件列表或搜索结果列表等. ...
- NVMe协议1.3c(一) 概述
刚开始接触NVMe,对此理解不深,如有错误敬请指出 1.1概述 NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信. 此接口针对企业和客户端固态驱动器进行了优化,通常 ...
- 创建Car类,包含name,price属性,构造器等方法,创建测试类,在main方法中创建Set接口的实现类,添加5个以上的Car对象,遍历集合元素,验证重复元素是否过滤了; 如果没有过滤,实现过滤功能;把每个小车的price降10000元,再遍历,查看price是否已改变
i汽车类 package com.lanxi.demo2_3; public class Car { private String name; private int price; @Override ...
- centos 进程查看
查看pid 所属文件/项目 ps -aux |grep -v grep|grep 51073
- Visual Studio Code--开发大大们都在用的编辑器
老公推荐的炒鸡nb的编辑器...说让我看起来像个假大神(微笑脸) 如何用VSCode练习python呢,还有VSCode有哪些常用的功能和快捷键呢?我会持续更新中... 1. 先来换个喜欢的颜色主题吧 ...