2.2.6 语言差异
在一小部分人看来,Java并不像我们知道的那样,其中有些特性被去掉了。
1.浮点运算
首先,J2ME里没有浮点运算。在J2ME平台上进行游戏编程,而且这里没有浮点运算。它的原因是在典型的小型设备上没有专门的浮点运算硬件,而且在有限能力的处理器上用软件模拟浮点运算也是一个很大的负担。在后面的章节笔者会介绍变通的方法。
2.Finalization
为了提高性能和减少整体需求,CLDC省去了自动对象终结回调机制。这就意味着没有Object.finalize方法可用。
在通常情况下,使用J2SE的时候,垃圾收集器会为即将从内存中销毁的对象调用该方法,然后可以释放一些要求显示释放的资源(如打开的文件)。这并不意味着垃圾收集器不再运作,只是它不调用finalize方法。一些程序员利用finalize方法来在对象被垃圾收集器处理时释放资源。现在这种方法是不可用的,所以必须在自己的程序流程中,执行适当的资源释放过程。这应该是比较好的。应该在不使用的时候马上释放资源,而不是进行这个过程时交给垃圾收集器。
3.错误处理
同样为了资源的原因,CLDC没有包含任何java.lang.Error异常类那个层次的东西。为了更新内存,表2.2中的那些错误是一些致命的打击,几乎没有任何机会从这样的错误中恢复过来,它只是由VM来通知设备操作系统,然后由设备操作系统来承受应用程序的这种行为。因为这些错误只在应用程序即将退出的时候发生,所以CLDC没有必要提供访问它们的途径。
表2.2 java.lang.Error 异常
|
异 常 |
描 述 |
|
Java.awt.AWTError |
因为在CLDC中没有AWT,所以不需要 |
|
Java.lang.LinkageError |
一个与类编译的不一致性有关的错误。这个异常有许多子类,如:java.lang. NoclassDefFoundError |
|
Java.lang.ThreadDeath |
这个语言中惟一具有较酷的名字的几个类之一。并不需要它,因为在它发生的时候,除了可能拖走一个已经爆炸的炸弹之外没有什么真正可以做的 |
|
Java.lang.VirtualMachineError |
虚拟机层面的错误,包括通常的OutOfMemoryError和StackOverflowError,同样应用程序也不能真正处理它 |






