3.1关于JDK的讨论
晨落: 今天我们讨论Java JDK。我是1998年**次接触Java开发工具(Java Development Kit,JDK)的,Java的一些特点吸引了我,因为Java的一大特点是平台无关性,也就是说一处编译处处运行。对于程序员来说,能够深深地体会到这个福音给我们带来的是什么,可以做到编程不考虑操作系统,太令人振奋了。Java的另外一个特点是面向对象的开发方法,当时面向对象的开发方式不是主流开发方法,所以我出于好奇开始学习了Java。
洪杨俊: 然后呢?
晨落: 当时,很少有Java方面的书籍,我好不容易找来JDK和Java的一些帮助文件以及JDK自带的Java源程序代码。我仔细阅读Java帮助文件并结合JDK源程序代码,发现有许多奥妙在里面。通过阅读帮助文件和源代码能够知道Java JDK背后的故事,在使用任何一个Java函数的时候,Java帮助我们完成了一系列的工作,让我们的编程工作量大大减少。
洪杨俊: 你是如何学习Java的?
晨落: JDK在我们安装的JDK路径下,例如,“我的电脑”是安装在“C: \Program Files\Java\jdk1.6.0_10 ”下,在该路径下有个文件SRC.ZIP,解包后将会发现文件夹的文件夹结构内容与JDK包完全一致。
洪杨俊: 这些代码和JDK类库中的实现是一致的吗?
晨落: 是完全一致,类库中的.class文件其实就是用这些源代码文件编译生成的。
洪杨俊: 在Java学习中用到的数据类型、函数、方法等都能够找到其对应Java源代码吗?
晨落: 是的,完全可以找到,例如,我们在Java中定义的数据类型Integer,就在“\src\Java\lang\Integer.Java”这个类文件中。打开类文件可以读到关于Integer的相关Java代码实现,如图31所示。
图31Integer类的Java代码
通过图31可以看出,关于Integer的Java类是如何实现的,例如,在不少教材中描述Integer数据的取值范围是-2147483648到2147483648,在源代码中可以找到相应的方法,以实现这个数据范围的校验。图32中的代码就是Integer*大值和*小值的判断处理代码片段。
图32Integer类型*大值和*小值的代码实现
洪杨俊: 这么多类库和函数,难道您全部阅读了吗?
晨落: 哈哈,不可能的事,我告诉你的意思是,我们需要了解Java的实现机制,JDK中所包含的主要类库有哪些,至少在学习Java的时候能够明确JDK类库,必要时分析源代码,理解Java中的相关类库的使用方法。
洪杨俊: 如何划分?你可以帮我列出重要的部分吗?
晨落: 我将Java基础阶段需要掌握的Java类库做了个总结,并且以树形结构的形式表现出来,如图33所示。只要我们能够按照这个树形图归纳出这些包中包含的类,知道它们能够完成哪些功能,并在开发过程中快速地查询这些函数的使用就足够了。
图33Java JDK结构图
洪杨俊: 有特别说明吗?
晨落: 有以下几个包需要熟悉使用,即Java.lang、Java.util、Java.sql、Javax.sql和Java.io,其他包在使用时能很快检索就行。总之,通过了解这些类库,能够帮助人们快速学习Java。
3.2JDK基础类型介绍
JDK提供利用Java编程语言进行程序设计的基础类。*重要的类是Object(它是类层次结构的根)和Class(它的实例表示正在运行的应用程序中的类)。
把基本类型的值当成一个对象来表示通常很有必要。包装器类Boolean、Character、Integer、Long、Float和Double就是用于这个目的。例如,一个Double类型的对象包含了一个类型为Double的字段,这表示如果引用某个值,则可以将该值存储在引用类型的变量中。这些类还提供了大量用于转换基值的方法,并支持一些标准方法,例如equals和hashCode。Void类是一个非实例化的类,它保持一个对表示基本类型Void的Class对象的引用。
类Math提供常用的数学函数,比如正弦、余弦和平方根。类似地,类String和StringBuffer提供常用的字符串操作。
类ClassLoader、Process、Runtime、SecurityManager和System提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和**策略实施等“系统操作”。
类Throwable包含可能由throw语句抛出的对象。Throwable的子类表示错误和异常。
JDK源代码路径为“SRC\Java\lang”。