上次面试中遇到的一个问题,问到System.out.println()中的out是不是内部类【不是内部类】,当时就给问蒙了,直观感觉out应该是System类的一个属性,跟内部类有什么关系?而且之前整理IO部分的时候记得有个PrintStream的类用于标准输出的,但是从没看过System的源码,也不敢随便再说了。后来看了下源码,发现的确是PrintStream,可能当时想问的是内部类的用法吧(真心感觉面试待靠缘分,很多面试官喜欢引导着问问题,方式很好,但很多时候可能让面试者搞不清你到底想问什么,我这次面试就深受打击,到最后面试官每个问题我都要先想半天是不是留了什么坑),不过归根结底自己水平差得多,还是要认真学习。 言归正传,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(); }

    至此,System基本上便讲完了,不过还有很多底层的东西没看懂(setJavaLangAccess()),留待以后解决吧。

http://www.cnblogs.com/good-temper/p/5042058.html

java中System类简介(转)相关推荐

  1. java中System类、String Builder类简介

    System类: System类为系统类,此包位于java.lang.System下,可以获得与系统相关的信息或系统操作,如: public class SystemClass{public stat ...

  2. java中system_《java中System类》 | 学步园

    System类 System类是一个特殊类,它是一个公共最终类,不能被继承,也不能被实例化,即不能创建System类的对象.System类功能强大,与Runtime一起可以访问许多有用的系统功能.Sy ...

  3. Java中----Font类简介

    一.Font类简介 Font类是用于设置图形用户界面上的字体样式的,包括字体类型(例如宋体.仿宋.Times New Roman等).字体风格(例如斜体字.加粗等).以及字号大小. 二.Font类的引 ...

  4. Java中System类(传智播客毕老师视频讲解)

    System:类中的方法和属性都是静态的. out:标准输出,默认是控制台. in:标准输入,默认是键盘. 描述系统一些信息. 获取系统属性信息:Properties getProperties(); ...

  5. java 中的class类_Java中Class类简介

    Java中Class类简介 1. 在面向对象的世界里,万事万物皆对象.(java语言中,静态的成员.普通数据类型除外) 类是不是对象呢?类是(哪个类的对象呢?)谁的对象呢? -- 类是对象,类是jav ...

  6. Java中System.exit()方法的功能简介说明

    转自: Java中System.exit()方法的功能简介说明 下文笔者讲述java代码中System.exit()方法的功能简介说明,如下所示: Java中System.exit()方法功能:此方法 ...

  7. java.util.Stack类简介

    转载自  java.util.Stack类简介 Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来 Deque(双端队列)比起St ...

  8. Java中System.getProperty()方法具有什么功能呢?

    转自: Java中System.getProperty()方法具有什么功能呢? 下文笔者讲述Java中System.getProperty()方法的功能简介说明,如下所示: System.getPro ...

  9. Java中System.getProperty()的参数

    Java中System.getProperty的使用方法: 1,System.getProperty返回的数值,比如java.version,java.home,os.name,user.home以及 ...

最新文章

  1. python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...
  2. 是你的数据还不够强!谷歌大脑「数据增强」开源,大神QuocLe出品
  3. Linux_进程管理计划任务
  4. 历数玩转光伏的IT巨头们
  5. 面向对象先导课程——PART3
  6. YARN/MRv2 Resource Manager深入剖析—RM总体架构
  7. 华为产品技术学习笔记之路由原理(二)
  8. [CLPR] 定位算法探幽 - 边缘和形态学
  9. 减少训练成本的一个方法
  10. 证券业震荡,数字化智能化变革、升级与突破或是新生力量(附案例)
  11. unix、linux 命令
  12. Win2000/XP/2003路由制作之Nat共享上网
  13. Maven依赖方式引用UEditor的jar包
  14. Clob 2 String
  15. RadASM的主题更换!
  16. 深度时空网络、记忆网络与特征表达学习在 CTR 预估中的应用
  17. 百度笔试题——开发测试工程师(深圳)
  18. WIN10 任务栏转圈 白屏问题
  19. 小白学编程必备的三大网站
  20. 上传并下载excel表格

热门文章

  1. 【Android测试】【第二节】Monkey工具
  2. org.springframework.beans包
  3. 关于sybase数据库的锁
  4. [分享] 关于App Store下载到一半发生错误的问题 [复制链接]
  5. Idea开发Java WEB 应用
  6. AWS — AWS 上的 5G 网络
  7. Octavia 的 HTTPS 与自建、签发 CA 证书
  8. VMware 虚拟化编程(6) — VixDiskLib 虚拟磁盘库详解之二
  9. Linux_NFS/Samba服务器
  10. 不同stm32f103芯片内部外设资源