天生就是一个糊涂鬼,改了这么多年了还是没有改回来,不知道怎么搞,我晕。
以前在用 Math.***() 的时候,一直都把 java.math.* 给 import 进来,从来没有人跟我说过这是不必要的,今天看那个 J2SE1.3 的 ROSE 模型,我才看到,也才恍然大悟,调用的时候用的就是调用 Math 的类方法,也就是说 Math 本身就是一个类,就是 java.lang.Math,而且是 final 型的。而 java.math ,这不是一个包吗?为什么连这个都没想到呢?汗!
今天心血来潮,突然想看一下 UML ,以前(九个月前大概)下载过几个 rose 模型,一直没看,惭愧呀!今天打开其中的一个看了一下,居然是 J2SE 1.3 的所有东西的模型,狂喜一下。还看什么 UML 啊,直接看 javax.swing 了,想把这个搞清楚已经是很久以前的事了,可老是静不下心来,不过今天还是老样子,没把心静下来。看了一下,感觉 class 太多了,以前也没怎么用它,肯定很生疏,这样搞不可能看得懂。于是就看 java.lang 了,认真地看了两个来回,认识马上就比以前更清楚很多了。
这个模型没有把 java.lang.Object 放在顶部,而是默认让其它的 class 继承它而不指明,这样一来又少了好多箭头,也把 java.lang.Throwable 放到了“顶部”,它有两个直接子类,分别是 java.lang.Error & java.lang.Exception ,原来 Exception 和 Error 是这样子的,才知道。
另外还有就是那些原始类型的封装类,都继承自 abstract class java.lang.Number,实现了 comparable。再就是这些了: class: Thread, Subset, ThreadLocal, InheritableThreadLocal; interface : Runable; final class: UnicodeBlock; 这里还有一些继承/实现关系。
最后就是剩下的这些‘孤立’(实际上并不孤立,只是他画成了孤立)的东西了。
注:红色的是 final class, 蓝色转圈是 interface, 灰色的则是 abstract class, 再就是 class 了。