A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一般现在时

中级黑马

  • 黑马币:36

  • 帖子:55

  • 精华:0

本帖最后由 一般现在时 于 2015-3-22 10:36 编辑

由于在基础视频中看到过关于System类的介绍,平常又经常敲System.out,System.in, 觉得这是一个很NB的类,所以突然来兴趣想去看看System类的源码,看看以我的修为能不能征服他!打开System类的源码,开始可以看到这个类声明了3个静态的输出输入流变量,in,out,err.

难怪,平时可以不用实例化输出流就可以直接使用System.out.println();输出信息,看到这里我就肯定要点进去看看那些API的设计人员是怎样给这些静态成员赋上初值的,也可以来学习他们的编程风格嘛!



竟然没有返回值,这怎么可能?没有对象,哪来的方法?我们又如何使用的?于是我猜测肯定在其他地方还是给他附上了值的!但是当我找遍了整个类,都没有发现在那个地方有给他们附上值!当时我就蒙了,以我的智商完全不能理解嘛!我左思右想,冥思苦想,还是想不到这是怎么回事!于是我只能求教别人了,我问了一个同学,他说他也不知道!但是后来他给我发了他的System的源码的截图


这不科学啊!难道是我人太丑?机器的问题?我是也是醉了..最终经过讨论,得出是版本的问题,他的JDK是1.8的,而我的是1.6的,原来是这样!但是问题又来了,那我的是怎么使用的呢?于是我就对比我俩的源码,发现我的1.6版本System的源码中多次出现native这个不明代码!我去,还是个Java关键字!经过百度知道native关键字的作用是在Java中调用其他语言的代码!这下问题就明白了,Java的低层竟然是也是用C写的,作为Java的使用者,我不服!!!虽然以前我也学过C!我又百度了下,于是可以理解,java是面向对象的语言,而C面向过程的语言,且对机器硬件有很好的支持!Java为了底层的效率所以会用C
当然java的类库还是用Java写的!
最后,还一个问题,就是Java 8 的JVM是不是还是使用的C呢?谁来说下!因为没有JDK 1.8的jre,就没研究了!

这是第一次看源代码!还没看完呢,就有这么多疑问····感觉学习JAVA的道路任重而道远!

2 个回复

倒序浏览
native不代表就一定是C写的,只是表明调用操作系统的API。调用native也不一定是为了效率,而是现代操作系统为了安全性,直接操作硬件的功能(比如你这里提到的IO)不对程序员开放,必须通过系统API转到内核模式操作,在Linux下,即便你用C写代码,也不能直接进行IO操作,必须通过system call
回复 使用道具 举报
fantacyleo 发表于 2015-3-17 15:39
native不代表就一定是C写的,只是表明调用操作系统的API。调用native也不一定是为了效率,而是现代操作系统 ...

我说调用C,是百度了的!不过你说的很有道理!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马