2.2.8 包含的类库
Java的一个让笔者喜欢的地方是,随着它的平台带来了丰富的类库。然而我们也可以想到,J2EE和J2SE的类库太大,是不能在小型设备上使用的。
CLDC的设计者面临着许多关于创建一组库放到配置中去的问题。当然,首先是所有事情背后最主要的驱动力——资源问题。它们拥有的空间比一个澳洲背包客完成世界旅游后的行李还小。有些东西必须被去掉,那自然意味着它们不能迎合所有的人。
这同样也提出了一个兼容性问题,目标是尽量保持与J2SE类似和兼容。为了方便实现这个,设计者把CLDC的库分成两个逻辑的种类——J2SE的一个子集和CLDC特定的类。
这些类由库的前缀来区分。J2ME中基于J2SE子集的等价物的子集使用与J2SE中同样的名字,所以例如java.lang.String在J2ME中跟J2SE中有同样的名字,它只是一个缩小的版本。CLDC特定的类是在java扩展层的下面的javax.*。这只是为J2SE中通常不出现的类保留的。
注意:CLDC特定的类听起来很棒,但是实际上它们并不存在。CLDC定义了一组与连接相关的类,但是实现它们并不是CLDC的任务,那是简表(例如MIDP)的工作。
下面看看经过CLDC挑选后究竟给我们留下了哪些功能。首先,根据下面的规则,这些类可能与J2SE中发现的在实现上是不同的,这一点很重要,要引起注意。
v 包的名称与J2SE对应的包是相同的。
v 不存在任何公有或者保护的方法和字段。
v 类和方法的语义不能变化。
简而言之,这意味着J2ME中实现的J2SE的类只能删掉方法,不能添加,而且对现有的方法不能更改(尽管这些方法的实际实现可能会完全不同——只要它们起相同的作用,不需要我们不在意那些不同)。
下面是一个完整的可用的类的列表;然而这个列表很具有欺骗性,因为很多J2ME的类都去掉了一些方法。
注意:在浏览CLDC类库的时候可能发现明显缺少一些重要的成分,如任何UI(用户界面)或者对设备相关功能的访问,这是特定种类设备的描述的任务。在MIDP节中,可以看到这些类。
1.系统类
v java.lang.Object
v java.lang.Class
v java.lang.Runtime
v java.lang.System
v java.lang.Thread
v java.lang.Runable
v java.lang.String
v java.lang.StringBuffer
v java.lang.Throwable
2.输入/输出类
v java.io.InputStream
v java.io.OutputStream
v java.io.ByteArrayInputStream
v java.io.ByteArrayOutputStream
v java.io.DataInput(interface)
v java.io.DataOutput(interface)
v java.io.DataInputStream
v java.io.DataOutputStream
v java.io.Reader
v java.io.Writer
v java.io.InputStreamReader
v java.io.OutputStreamWriter
v java.io.PrintStream
3.集合类
v java.util.Vector
v java.util.Stack
v java.util.Hashtable
v java.util.Enumeration(interface)
4.类型库
v java.lang.Boolean
v java.lang.Byte
v java.lang.Short
v java.lang.Integer
v java.lang.Long
v java.lang.Character
5.日历和时间类
v java.util.Calendar
v java.util.Date
v java.util.TimeZone
6.工具类
v java.util.Random
v java.lang.Math
7.异常函数
v java.lang.Exception
v java.lang.ClassNotFoundException
v java.lang.IllegalAccessException
v java.lang.InstantiationException
v java.lang.InterruptedException
v java.lang.RuntimeException
v java.lang.ArithmeticException
v java.lang.ArrayStoreException
v java.lang.ClassCastException
v java.lang.IllegalArgumentException
v java.lang.IllegalThreadStateException
v java.lang.NumberFormatException
v java.lang.IllegalMonitorStateException
v java.lang.IndexOutOfBoundsException
v java.lang.ArrayIndexOutOfBoundsException
v java.lang.StringIndexOutOfBoundsException
v java.lang.NegativeArraySizeException
v java.lang.NullPointerException
v java.lang.SecurityException
v java.lang.EmptyStackException
v java.lang.NoSuchElementException
v java.io.EOFException
v java.io.IOException
v java.io.InterruptedIOException
v java.io.UnsupportedEncodingException
v java.io.UTFDataFormatException
8.错误类
v java.lang.Error
v java.lang.VirtualMachineError
v java.lang.OutOfMemoryError
读者可能已经注意到在这个列表中没有连接类,例如那些在java.net.*层的类。因为在现有通信库中的相互关联性,不可能做到不破坏本节开始时提到的移植规则而包含该连接类。所以CLDC为新的通信函数层包含了一个框架,叫做通用连接框架。CLDC那个削减的框架设计确实只是一个设计,它并没有具体实现它的类。正因为这样,要到简表里去 寻找。






