Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在try/catch块中捕获异常后继续执行循环_Java_Loops_Exception_Try Catch - Fatal编程技术网

Java 在try/catch块中捕获异常后继续执行循环

Java 在try/catch块中捕获异常后继续执行循环,java,loops,exception,try-catch,Java,Loops,Exception,Try Catch,当(iterator.hasNext())发生异常时,如何继续迭代循环 所以我想做下面的事情 try { loop: while (iterator.hasNext()) // as excetion is on this line excetion will be catch by catch_2 { try { Re

当(iterator.hasNext())发生异常时,如何继续迭代循环

所以我想做下面的事情

            try {
                loop: while (iterator.hasNext())  // as excetion is on this line excetion will be catch by catch_2
                {
                    try {
                        Result res = (Result) iterator.next();
                        list.add(res);
                    } catch (Exception e) {                    // catch_1
                        e.printStackTrace();
                    }
                }
            } catch (Exception e) {                            // catch_2
                // goto start of the loop
                continue loop;
            }

Iterator<UserProvisioning> iterator = beans.iterator();
            while (iterator.hasNext()) {
                try {
                    UserProvisioning userProvisioning = (UserProvisioning) iterator.next();
                    System.out.println(userProvisioning.getFIRST_NAME());
                    list.add(userProvisioning);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    logger.error("Error occured...)
                }
            }
因此,我试图记录错误并继续迭代下一条记录

编辑
iterator.hasNext()
应该返回true或false,但是它的抛出错误

如果在循环中放置try-catch块,它将继续循环直到结束,除非您中断它

for(Iterator<UserProvisioning> iter = beans.iterator(); iter.hasNext();) {
  try{
    UserProvisioning userProvisioning = iter.next();
    System.out.println(userProvisioning.getFIRST_NAME());
    list.add(userProvisioning);
  } catch(Exception ex) {
    logger.warn("An issue occurred when looping through user provisionings: " + ex.getMessage());

  }
}
for(迭代器iter=beans.Iterator();iter.hasNext();){
试一试{
UserProvisioning UserProvisioning=iter.next();
System.out.println(userProvisioning.getFIRST_NAME());
添加(用户设置);
}捕获(例外情况除外){
logger.warn(“在用户配置中循环时出现问题:+ex.getMessage());
}
}
上面的代码将设置一个迭代器并在其中循环。如果发生异常,它将记录并继续循环,因为没有调用
break


另外,由于您知道迭代器是什么类型,因此在调用
iter.next()

时无需强制转换它,以确定它的用途?你想把异常扔进无穷大?例如:迭代器为null,您希望您的日志显示正在记录的数以百万计的NPE?(您甚至不记录它们)请检查更新的问题“为什么在hasNext中抛出异常?”?我从未见过迭代器定义。@suiwenfeng否,我在异常记录之后有下一个元素(记录),因为异常之后有记录,这意味着hasNext()应该检查结果是否为非空(并返回true)。否,hasNext应该返回true或false,并且没有异常。假设CSV中总共有10行,错误在第3行,则上述代码记录第3行的错误,循环不会继续到第4个CSV记录。上述代码将继续到第4个CSV记录,除非有什么东西实际抛出了
错误
,而不是
异常
,其中发生了更改
Exception
Throwable
自我的回答以来,您添加了更多的上下文,但是
iter.next()
try catch
块中,因此如果它无法调用next,它仍将继续;
for(Iterator<UserProvisioning> iter = beans.iterator(); iter.hasNext();) {
  try{
    UserProvisioning userProvisioning = iter.next();
    System.out.println(userProvisioning.getFIRST_NAME());
    list.add(userProvisioning);
  } catch(Exception ex) {
    logger.warn("An issue occurred when looping through user provisionings: " + ex.getMessage());

  }
}