Java System类详解_动力节点Java学院整理
来源:互联网 发布:网络政治参与案例 编辑:程序博客网 时间:2024/06/03 18:06
System类是jdk提供的一个工具类,有final修饰,不可继承,由名字可以看出来,其中的操作多数和系统相关。其功能主要如下:
· 标准输入输出,如out、in、err
· 外部定义的属性和环境变量的访问,如getenv()/setenv()和getProperties()/setProperties()
· 加载文件和类库的方法,如load()和loadLibrary()、
· 一个快速拷贝数组的方法:arraycopy()
· 一些jvm操作,如gc()、runFinalization()、exit(),该部分并未在源码的java doc中提到,可能因为本身不建议主动调用吧。而且这几个方法都仅仅是Runtime.getRuntime()的调用,两者没有区别 下边直接看图,主要的方法和功能都已经列出来。
下边我们重点来该类是如何初始化的。首先在开头我们就可以看如下代码:
private static native void registerNatives();
static {
registerNatives();
}
类中的静态代码块调用了一个native方法registerNatives(),可以猜到该方法应该是一个入口方法,看一下注释:通过静态初始化注册native方法,该方法会令vm通过调用initializeSystemClass方法来完成初始化工作。果然如此,那么接下来我们看下initializeSystemClass方法吧:
private static void initializeSystemClass() {
// 初始化props
props = new Properties();
initProperties(props);
sun.misc.VM.saveAndRemoveProperties(props);
//获取系统相关的换行符
lineSeparator = props.getProperty("line.separator");
sun.misc.Version.init();
//分别创建in、out、err的实例对象,并通过setXX0()初始化,查看setXX0()方法可知,这是个native方法,将系统的标准流管理到类内的对象
FileInputStream fdIn = new FileInputStream(FileDescriptor.in);
FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err);
setIn0(new BufferedInputStream(fdIn));
setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
setErr0(new PrintStream(new BufferedOutputStream(fdErr, 128), true));
//加载zip包以获取java.util.zip.ZipFile这个类,以便之后加载利库使用
loadLibrary("zip");
// 设置平台相关的信号处理
Terminator.setup();
// 初始化sun.misc相关的环境变量
sun.misc.VM.initializeOSEnvironment();
// 主线程不会在同一个线程组中添加相同的线程,我们必须在这里自己实现。注释半天没弄明白,看代码就是主线程自己把自己加到了自己的线程组中......
Thread current = Thread.currentThread();
current.getThreadGroup().add(current);
// 注册共享秘钥?注释没看明白,该方法就是实例化一个JavaLangAccess
setJavaLangAccess();
// 子系统在初始化的时候可以调用sun.misc.VM.isBooted(),以保证在application类加载器启动前不做任何事。booted()其实就是改了个状态,使isBooted()变为true。
sun.misc.VM.booted();
}
本文转自互联网
- Java System类详解_动力节点Java学院整理
- Java Object类详解_动力节点Java学院整理
- Java Runtime类详解_动力节点Java学院整理
- Java Scaner类详解_动力节点Java学院整理
- Java String类详解_动力节点Java学院整理
- Java类的继承_动力节点Java学院整理
- Java虚拟机 (JVM)运行机制_动力节点Java学院整理
- Java代码注释规范_动力节点Java学院整理
- Java运算符_动力节点Java学院整理
- Java中的关键字_动力节点Java学院整理
- Java字符编码原理_动力节点Java学院整理
- JVM(Java虚拟机)简介_动力节点Java学院整理
- Java初学者问题图解_动力节点Java学院整理
- Java多态_动力节点Java学院整理
- Java构造方法_动力节点Java学院整理
- Java数据结构之队列_动力节点Java学院整理
- Java数据结构之数组_动力节点Java学院整理
- Java数据结构之图_动力节点Java学院整理
- Nginx 绑定多个域名的方法
- 添加购物车功能
- Linux系统排查2——CPU负载篇
- at org.apache.http.util.EntityUtils.toString(EntityUtils.java:244) 线程卡死
- tomcat java.lang.OutOfMemoryError: Java heap space
- Java System类详解_动力节点Java学院整理
- 数据结构与算法 第二课
- Linux系统排查3——I/O篇
- Dream Without Concession
- 百分比布局的使用
- leetcode 300. Longest Increasing Subsequence 最长递增子序列LISS
- web无插件解码播放H264/H265(js解码HTML5播放)
- 股票量化分析(3)——matplotlib利用tushare的股票数据画一般图、k线图
- Java二分法查找_动力节点Java学院整理