摘要:
借助jdk 5.0的新特性annotations,你可以使用它代替先前使用的xdoclet,不过当且仅当使用jdk 5.0的时候,为了保持向下兼容,用xdoclet生成mapping files仍然是最好的选择。首先建立环境,将hibernate-annotations.jar和lib/ejb-3.0-edr2.jar复制到你的classpath下。官方的建议是将hibernate初始化放在st......
摘要:
天生就是一个糊涂鬼,改了这么多年了还是没有改回来,不知道怎么搞,我晕。 以前在用 math.***() 的时候,一直都把 java.math.* 给 import 进来,从来没有人跟我说过这是不必要的,今天看那个 j2se1.3 的 rose 模型,我才看到,也才恍然大悟,调用的时候用的就是调用 math 的类方法,也就是说 math 本身就是一个类,就是 java.lang.math,而且是......
Java源码分析:深入探讨Iterator模式
java.util包中包含了一系列重要的集合类.本文将从分析源码入手,深入研究一个集合类的内部结构,以及遍历集合的迭代模式的源码实现内幕.
下面我们先简单讨论一个根接口collection,然后分析一个抽象类abstractlist与它的对应iterator接口,并仔细研究迭代子模式的实现原理.
本文讨论的源代码版本是jdk 1.4.2,因为jdk 1.5在java.util中使用了很多泛型代码,为了简化问题,所以我们还是讨论1.4版本的代码.
集合类的根接口collection
collection接口是所有集合类的根类型.它的一个主要的接口方法是:
boolean add(object c)
add()方法将添加一个新元素.注意这个方法会返回一个boolean,但是返回值不是表示添加成功与否.仔细阅读doc可以看到,collection规定:如果一个集合拒绝添加这个元素,无论任何原因,都必须抛出异常.这个返回值表示的意义是add()方法执行后,集合的内容是否改变了(就是元素有无数量,位置等变化),这是由具体类实现的.即:如果方法出错,总会抛出异常;返回值仅仅表示该方法执行后这个collection的内容有无变化.
类似的还有:
boolean addall(collection c);
boolean remove(object o);
boolean removeall(collection c);
boolean remainall(collection c);
object[] toarray()方法很简单,把集合转换成数组返回.object[] toarray(object[] a)方法就有点复杂了,首先,返回的object[]仍然是把集合的所有元素变成的数组,但是类型与参数a的类型是相同的,比如执行:
string[] o = (string[])c.toarray(new string[0]);
得到的o实际类型是string[].
其次,如果参数a的大小装不下集合的所有元素,返回的将是一个新的数组.如果参数a的大小能装下集合的所有元素,则返回的还是a,但a的内容用集合的元素来填充.尤其要注意的是,如果a的大小比集合元素的个数还多,a后面的部分全部被置为null.
最后一个最重要的方法是iterator(),返回一个iterator(迭代子),用于遍历集合的所有元素.
用iterator模式实现遍历集合
iterator模式是用于遍历集合类的标准访问方法.它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免向客户端暴露集合的内部结构....
下一页 摘要:
本文开始将讲述如何配置和使用netbeans4.0开发环境来创建配置和开发java/j2me/ target=_blank>j2me项目,开始j2me开发之旅。由于这是创建的第一个j2me程序,按照程序开发的惯例,这头把交椅自然又是非"hello world"莫属了。helloworld虽然功能简单,但是麻雀虽小,五脏俱全,通过这个小程序的开发,完全能够达到让读者熟悉j2m......