public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size) {
items = new Object[size];
}
public void add(Object x) {
if (next < items.length)
items[next++] = x;
}
private class SequenceSelector implements Selector {
private int i = 0;
public boolean end() {
return i == items.length;
}
public Object current() {
return items[i];
}
public void next() {
if (i < items.length)
i++;
}
} public Selector selector {
return new SequenceSelector();
} public static void main(String[] args) {
Sequence sequence = new Sequence(10);
for (int i = 0; i < 10; i++)
sequence.add(Integer.toString(i));
Selector selector = sequence.selector();
while (!selector.end()) {
System.out.print(selector.current() + " ");
selector.next();
}
}
}请大家帮忙看看这个main方法调用的过程能不能直接给我说清楚
我想了二天了.还是不知道怎么个过程.实在是看不懂.
解决方案 »
- 自定义ClassLoader的问题!!
- 运用java如何将pdf转换为swf
- 在windows下设的那个环境变量和在Dos窗口里用-classpath以及set classpath这三个环境变量会相互替换么?
- 哪位大侠知道怎么让swt的一个Composite变成透明的?急!
- 『求助』Log4j的属性文件,logging.properties的内容是依照什么规范?谢谢
- 纯数据byte data[x*y]怎么生成JPEG or gif等图片?
- 本人菜鸟刚学习hibernate 在练习对数据添加数据时遇到问题实在解决不了求高手帮忙
- 如和在dos下只打java或appletviewer反正就是bin文件夹中的程序就运行
- 页面之间的链接用全名链接(URL),会出现数据丢失吗?Session会变吗?在线等待!
- 为什么这个论坛的速度这么慢,而且还有很多乱码?
- 关于static ,final修饰函数
- 做一个简单的客户端服务器端,出现一个问题???
Selector selector = sequence.selector();这句返回一个对象selctor 是一个内部类的对象,selector隐形的持有sequence这个对象的引用。所以slector 的方法能自由的访问sequence对象的任何成员,包括private的成员。所以selector自己的方法end(),next()可以顺利的执行。
interface Selector {
boolean end();
Object current();
void next();
}
return new SequenceSelector();
}
就是父类引用指向子类对象
Selector 理解为 Iterator
selector()理解为iterator()
Sequence.java:33: 需要 ';'
public Selector selector {
只要把public Selector selector后面增加一个小括号(),即可正常运行这程序用到了内部类,这个内部类的作用是重写接口中的方法 main方法中的程序说明: public static void main(String[] args) {
Sequence sequence = new Sequence(10); //定义一个Sequence类的对象sequence,并指定item对象数组有10个记录
for (int i = 0; i < 10; i++) //用for 循环给对象数组item,从0到9分别赋予0到9的整型String对象。
sequence.add(Integer.toString(i));
Selector selector = sequence.selector();
while (!selector.end()) {
System.out.print(selector.current() + " "); //输出结果为:0 1 2 3 4 5 6 7 8 9
selector.next();
}
}