Java 在try/catch块中捕获异常后继续执行循环
当(iterator.hasNext())发生异常时,如何继续迭代循环 所以我想做下面的事情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
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());
}
}