如何阅读Java的技术文档

在知识星球看到一个同学的提问,问如何阅读Java的API文档?作为一个C++程序员,总结了两条经验,那就在Java文档的阅读中小试牛刀吧。

1. 看地图—MFC之类图继承

记得最开始学习MFC的时候,经常用到的一个文档包是MSDN2001。安装完成以后,会有MFC的一个类继承图,大约是这样的: MFC 通过这个继承图,你可以看到各个类之间的继承关系。如果我需要抛出异常,那么就可以看看CException以及它的继承类;如果我需要一个字体的对话框,那么就可以看看CFontDialog;如果需要在界面画图,那么就可以看看CDC和CGdiObject的部分。

在阅读Leveldb代码的时候,我使用Doxygen工具,生成了文档。可以非常方便的进行索引的查找。还生成了类似的结构类图,如图所示: leveldb

通过类图可以分析出结构关系,那么需要确定SpecialEnv的基础功能的时候,可以先去看Env类的接口,会更好的提高效率。

2. 建索引—小学语文之默写目录

小学五年级的的时候,语文老师是我的一个叔叔,一个络腮胡子的不带眼镜的中年人。记得他跟其他语文老师的一个区别是要求我们背诵和默写语文课本的目录部分,当时的我感觉是一脸的懵,不能够明白他让我们这么做的原因。后来写两篇读书笔记的时候,用到了两本小说的回目,终于明白了他的用途。

我有一个微信的读书群,群里有一周讨论的题目是《红楼梦》最喜欢的一个女生,我选择了晴雯。跟晴雯有关的,我记得的故事情节有“晴雯撕扇”、“晴雯补雀金裘”、“宝玉看生病的晴雯”。通过这个几个简单的关键字,找到了对应的回目,分别是“第三十一回 撕扇子作千金一笑 因麒麟伏白首双星”、“第五十二回 俏平作情掩虾须镯 勇晴雯病补雀金裘”、“第七十七回 俏丫环抱屈夭风流 美优伶斩情归水月”。因为《红楼梦》是章回体,每一回的题目就成了整本书的索引,所以加快了我定位具体段落的速度。

但是在写另一篇《平凡的世界》的读后感的时候,就没有这么幸运了。比如我要写李向前和润叶相亲的情节,我能记得的大概是在整本书的前1/3。具体的段落我只好采用二分查找法了,速度就慢了很多。

这就是自下而上来阅读的一种方法,也就是说目录是书籍的索引和压缩。通过目录查找和定位具体信息的过程,就是把书读薄了的过程。

3. 过程实践

第1部分和第2部分是我的经验总结,邓爷爷说:“实践是检验真理的唯一标准”。那我们就把上面的两种方法试一下。

3.1 看目录

JAVA文档之在线版

上面是我找到的一个在线版本的Java的API文档。在页面的主体中,就是主要类的目录了。对页面进行大概的浏览,就可以知道它包括java.awt.* 这些应该是跟GUI有关的;java.math主要是用于数学计算的一些函数;java.net.*是进行网络操作的一些类;java.lang.reflect应该是进行反射的一些类……

我们具体的点开一个,比如java.net。 Java.net.Image 就可以看到这部分中的SocketOptions的就是用来设置Socket的一些选项的。

3.2 看继承

比如我们用到的System.out.println("Hello World!");这是我们最开始学习Java的时候经常用到的一条语句,用来输出HelloWorld。如果此时我要进行输入,我该怎么办呢?

仔细分析一下: println是一个方法,而System.outjava.io.PrintStream的一个实例。我们去看PrintStream的继承关系, PrintStream继承关系 可以看到它继承自java.io.OutputStream,那么猜想,应该有一个对应的InputStream。我们找到这个类,再看看它对应继承类,应该就可以实现输入了。我找完了对应的继承类,可以进行数据的读取,但不是从控制台读取的。后来查找资料发现是从Util.Scanner进行读取的,我表示不理解为什么java这样设计了,有知道的同学可以告诉我么?

4. 总结

以上就是我对如何阅读文档的一个总结,从文学的阅读讲到了文档的阅读。如果您有什么意见或者建议,或者更好的阅读方法,欢迎分享给我。

可以聊聊文学,
可以聊聊摄影,
可以聊聊程序,
可以聊聊感悟,
你想听我聊什么,请告诉我。

image