黑马程序员技术交流社区
标题: 关于集合,,这个程序错在哪了。。 [打印本页]
作者: 梁清平 时间: 2012-5-12 14:49
标题: 关于集合,,这个程序错在哪了。。
本帖最后由 梁清平 于 2012-5-12 15:36 编辑
import java.util.*;
public class CollectionDemo
{
public static void main(String[] args)
{
method_get();
}
public static void method_get()
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
Iterator it = al.iterator();
while(it.hasNext());
{
sop(it.next());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
问题一:这个程序为什么运行不了,好像是形成了空的无限循环,求解。
问题二:毕向东老师的视频里有一个跟这一模一样的代码,就依次取出了容器中的内容。请解释一下这里的while循环吧,有点看不懂。。
问题三:method_get();是静态方法,为什么在调用的时候不用加class名就可以调用啊?
作者: 孙宇晨 时间: 2012-5-12 14:54
while(it.hasNext());
{
sop(it.next());
}
你多加了个; 看见好多人都出现同样问题了 要细心哦楼主
作者: aaawqqq 时间: 2012-5-12 14:56
while(it.hasNext());
循环语句不要加分号 例如for 等
作者: 索学超 时间: 2012-5-12 15:24
这段代码我执行了下 把下面那个分号去了就能成功执行的,并不会形成什么死循环
while(it.hasNext())//;此处多了个分号,在循环while for 或者 if switch等后面有个括号下面还{}代码块的时候不用加分号
{
sop(it.next());
}
}
这个while循环的条件是it.hasNext(),这个方法的意思是判断是否存在下一条记录,如果存在返回true(继续循环)如果不存在
返回false(结束循环)
循环体是:sop(it.next());
sop();不用解释了吧,打印吗
it.next();这个方法的功能是读取下一条记录,并把负责读取的那个指针指向下条记录的后面
作者: 杨威 时间: 2012-5-12 15:27
在迭代器区元素的判断语句处出现了错误
Iterator it = al.iterator();
while(it.hasNext());
{
sop(it.next());
}
程序运行到判断语句while时就会判断运行的条件,而你的后面加了分号,相当于一条while语句了
执行到此条语句是it.hasNext()返回true,语句就相当于while(true);这是个死循环,程序到这一步就停下了
作者: 黑马张立国 时间: 2012-5-12 15:59
上面的就不说了
问题三:method_get();是静态方法,为什么在调用的时候不用加class名就可以调用啊?
静态方法其实就是用到了静态绑定(当方法在方法区时,就已经被加上了类.方法,而非静态用到了动态绑定this.方法。)虽然你没写但实际上已经隐式的写了,当不在一个类时可以用显示的类.方法。
作者: 田建 时间: 2012-5-12 21:33
新手路过,学习为上!
作者: It's_Zero 时间: 2012-5-12 22:39
问题三:method_get();是静态方法,为什么在调用的时候不用加class名就可以调用啊?
因为你的这个method_get()方法是本类中的方法,本来的中方法不管是static还是非static方法都能直接通过 方法名调用 如 method_get(); 本类调用本类方法默认为 this . 方法名
加了static 修饰不过是给它设定了生命周期的时限变长了,存放地方由栈内存转到方法区.
作者: 赵茹艳 时间: 2012-5-13 00:03
是的,分号的问题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |