JAVA JDK 源码学习 ,以1.8为例,按照下面图片顺序依次学习: applet ,awt,beans,io,lang,math,net,nio,rmi,security,sql,text,time,util
第一课,广泛认知它们
1 applet
Java applet 为使用Java语言编写的一些程序,可以直接插入到网页之中。
不建议去学,已经被淘汰了
2 awt
java.awt是一个软件包,包含用于创建用户界面和绘制图形图像的所有分类。
个人觉得用途不大,谁会用java 画图?
3 beans
java 的底层,没读懂
4 io
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。
5 lang
java.lang包是真正的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。
按理说是要最先学的。
6 math
java.math提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。
这个包里内容很少就是为了让java更精确,可以单独出来学
7 net
java.net是Java技术相关的社区网站,它还提供了基于网络的一个Java项目的源代码库。
网路链接相关的类都在这里。可它依赖了io /util等等很多包,需要靠后学。
8 nio
java.nio 是指非阻塞式IO , 它为java 提供非阻塞式的高伸缩性网络.
依赖io,需要靠后学
9 rmi
RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。
在这个包,丰富了JAVA 的面向对象,可以单独出来学
10 security
java.security为java提供安全。建议单独出来靠后学。
11 sql
java 访问数据库的底层,可以单独学。
不是很常用了,被mybatis 等框架代替了
12 text
java.text,提供一些用于迭代文本的类,一些用于格式化和分析的类,一些用于整理字符串的类
13 time
定义了一些原生的date ,可以先学。
14 util
包含集合框架、遗留的 collections 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包
实际开发中用的最多的一个包,要重点学。
第二课,开始逐一学习
1 java.lang.Object
如图,它有下面几个方法.
(1) equals
需要知道的时,如果不重写这个equals 那么这里就是==
public boolean equals(Object obj) {
return (this == obj);
}
string 类的equals. 是先比地址再比value .
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
附录1: 统计类数量的代码段
这是看rt包里 java/util 里类的数量的方法。
public static void main(String[] args) throws IOException {
JarFile jarFile = new JarFile("C:\\Program Files\\Java\\jdk1.8.0_60\\jre\\lib\\rt.jar");
Enumeration<JarEntry> jarEntries = jarFile.entries();
AtomicInteger num = new AtomicInteger();
jarFile.stream().forEach(m->{
if(m.getName().startsWith("java/util") && !m.getName().contains("$") && m.getName().endsWith("class")){
System.out.println(m.getName());
num.getAndIncrement();
}
});
System.out.println("共有类:"+num.toString());
}