黑马程序员技术交流社区

标题: 关于集合,,这个程序错在哪了。。 [打印本页]

作者: 梁清平    时间: 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