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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-4-3 21:19  /  1787 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-4-3 21:43 编辑

没别的,就好奇,想看看源码!结果,看不懂 {:soso__8961432591078930798_3:}
首先我在JDK文档查找System,说in是“标准”输入流,接着我查找in的源码:
  1. public final static InputStream in = nullInputStream();
复制代码
接着,我查找JDK中System的nullInputStream()方法,找不到,接着我查找了nullInputStream()方法的源码,如下:
  1. private static InputStream nullInputStream() throws NullPointerException {
  2.         if (currentTimeMillis() > 0) {
  3.             return null;
  4.         }
  5.         throw new NullPointerException();
  6.     }
复制代码
这个方法声明抛出异常,为什么调用的时候不需要try、catch语句?
接着我在JDK文档查找了currentTimeMillis() 方法,说是:返回以毫秒为单位的当前时间,源码为:
  1. public static native long currentTimeMillis();
复制代码
至此,回头看看nullInputStream() 方法,“currentTimeMillis() > 0”这个语句应该不会有假的情况出现吧,那就是说都是返回null,如果都是返回空,那这个函数不是多余的吗?直接给in=null就行了。
那么也就是说public final static InputStream in = null;
这个InputStream的引用变量in指向了空,怎么还可以使用InputStream里的方法吗?

4 个回复

倒序浏览
java.lang.Object
  java.lang.Throwable
      java.lang.Exception
          java.lang.RuntimeException
              java.lang.NullPointerException
他是运行时异常
回复 使用道具 举报
yangshang1 发表于 2012-4-4 07:58
java.lang.Object
  java.lang.Throwable
      java.lang.Exception

哦,谢谢!
回复 使用道具 举报
至此,回头看看nullInputStream() 方法,“currentTimeMillis() > 0”这个语句应该不会有假的情况出现吧?问题还有些没解决,{:soso__15674501862584447789_3:}  呀!
回复 使用道具 举报
再顶再顶再顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马