对于Java语言支持的特殊方面
CLDC总的来说是与Java语言完全兼容的,但需注意以下几点:
不支持浮点数据类型(即没有float和double)(这实际上主要是由于CLDC所面向的设备,其硬件因其内存限制或是基于安全性的考虑不支持浮点运算)
不支持类实例(class instance)的终结(finalization),即不存Object.finalize()方法。(注:finalization指的是java中提供的有别与garbage collection的另外的一种对象清理方法。具体可参看侯捷老师译的Bruce Eckel的《Thinking in Java 第二版》,可以在www.jjhou.com中下载)
有限的错误处理,即大部分Java.lang.Error的子类都未被支持。与此相反,CLDC包括了相当完备的异常(exception)类。
对于Java虚拟机(Java Virtual Machine)支持的特殊的方面
实质上CLDC在其严格的内存限制下达到了对Java虚拟机相当程度的兼容性。不过还是有下列不同点:
- 不支持浮点数据类型(没有float和double)
- 不支持JNI (the Java Native Interface )不支持用户自定义的Java级的类载入器(class loaders )
- 没有反射(reflection)特性(注:reflection指java通过java.lang.reflect提供的,可以对类的能力进行分析的功能。常用来对类的结构进行检查,在JavaBeans上有广泛运用可参见Gary Cornell的Core Java2 volumeI,II,机工有出中译本)
- 不支持线程组(thread groups)或守护线程(daemon threads)
- 不支持类实例(class instance)的终结(finalization)
- 没有弱参考(weak references)(注:weak reference提供了一种解决指向已经被garbage collector清除的对象的方法。在Java2中被介绍。具体请参考java.lang.ref API 文档,和sun网站上关于Reference Objects和Garbage Collection的文章。)
- 有限的错误处理(error handling)
类文件审核过程(classfiles Verification)
CLDC要求其下层的虚拟机能够辨别并拒绝非法的class文件。但由于CLDC本身面向小内存消耗的小型设备这一前提。其类文件检测机制与J2SE中定义的标准类文件审核机制还有所不同。请注意看下图:

请注意上图所示CLDC中的预审核(preverification)过程。这是CLDC区别于通常的类文件审核过程的关键。如上图所示,当源程序被编译后,必须被预审核器预审核,然后才能被下载到目标设备上去。之所以有这一步骤,主要是为了减轻KVM中审核器的负担,加快审核速度。就像我前文提到的,这是出于对CLDC支持的硬件的考虑(毕竟手机和PDA并没有我们PC机那样奔腾的“芯”呀!^-^)。这里记住这个概念就行了。具体的操作方法我会在以后讲述编写MIDlet程序时介绍。
