小周和你读源码(1)

对于java.lang部分代码的阅读提纲

Posted by Haiming on December 18, 2019

今天开始梳理以下 java 的底层源码,第一部分打算从 java.lang,这个最基本的包开始。不知道这个系列多久可以完成,但是希望自己可以一直坚持下去。

本来认为,看源码就要把一个类吃透了再吃下一个,但是后来真正阅读的过程之中发现,类和类之间相互交错,想要彻底的将一个类看透对我目前而言过难,所以决定先以广度为主,将代码的大部分功能做初步的了解。

顺带一提,之前自己看openj9的代码,发现很多地方看着步履维艰,很难推进。后来发现是自己的”教材“错了,应当使用openjdk来进行学习。前者是IBM自己”魔改“出来的代码,其并不具有推广java,供很多java 程序员参考的作用;而后者之中的代码是Oracle自己出版,同时也肩负着推广,讲解等等部分的使命,因此应当学习后者。

下面是初步预计的会看的一些基本类和接口:

  • Boolean
  • Byte
  • Character
  • Class
  • ClassLoader
  • Comparable
  • Cloneable
  • Double
  • Enum
  • Error
  • Exception
  • Float
  • IndexOutOfBoundException
  • Iterable
  • Long
  • Math
  • NullPointerException
  • Number
  • Object
  • Override
  • Package
  • Process
  • Readable
  • Runnable
  • Runtime
  • RuntimeException
  • Short
  • String
  • StringBuffer
  • StringBuilder
  • Thread
  • ThreadLocal
  • Throwable
  • UnknownError
  • Void

Java,lang.reflect:

  • Modifier

希望自己可以学到很多。

看到的阅读顺序举例,准备先按照这个试试:

http://www.softtest.com/dev/devtech/16623.html

可能的一种阅读顺序是:

  1. 基本类型的包装类(Character放在最后)
  2. String、StringBuffer、StringBuilder、StringJoiner、StringTokenizer(补充正则表达式的知识)
  3. CharacterIterator、StringCharacterIterator、CharsetProvider、CharsetEncoder、CharsetDecoder(较难)
  4. java.util.function下的函数表达式
  5. java.nio下的各种Buffer实现
  6. java.lang.ref和jdk.internal.ref下的各种引用:软引用/弱引用/虚引用
  7. Unsafe的实现(JDK9之后有两个同名类,一个引用了另一个,建议放在一起阅读)
  8. java.util.stream下的流式编程的实现(很难)
  9. Thread和ThreadLocal
  10. Math、Random、BigInteger、BigDecimal
  11. java.lang.reflect下反射的实现(先掌握JDK 9之后引入的模块系统)
  12. ClassLoader的实现
  13. javax.lang.model下Java语言模型的实现(可以参考Java官方语法文档)
  14. 注解(需要彻底掌握)
  15. Timer、ResourceBundle、Properties
  16. 时间日期类型(尤其是Java8新增的部分)
  17. java.lang.reflect.Proxy, JDK默认的动态代理
  18. java.util.concurrent并发包。先读原子类,再读锁的实现类,最后阅读那些并发工具的实现(很难)
  19. 集合框架,主要是三大类:List、Set、Map(先读非线程安全的实现,再读线程安全的实现)
  20. 网络编程(主要阅读Socket通信部分,后续可以阅读HttpClient的实现)
  21. IO/NIO/BIO(很难)
  22. Files、Path等文件操作工具类
  23. sql、xml处理类/接口
  24. ……