zoukankan      html  css  js  c++  java
  • 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 获取字符串形式的换行符 或
    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常用的操作的获取系统时间,标准输入输出流,拷贝数组,获取系统属性这些方法.

     

  • 相关阅读:
    C# 图片存入SQL Server数据库
    C#如何将Build成功的程序集Copy到上一层目录
    JavaScript中JSON字符串和JSON对象相互转化
    如何将C#对象转化为JSON字符串
    SQL的常用语句
    NHibernate的使用
    如何配置Spring的XML文件及使用
    TRIGGER的使用(修改SP自动触发)
    iOS UIButton上下排列(上图下文)
    将.c .h文件打包成静态库 .a .so
  • 原文地址:https://www.cnblogs.com/wangxuejian/p/10596866.html
Copyright © 2011-2022 走看看