单个 while 循环中的多个计数器,计数器增量基于各种异常发生

问题描述 投票:0回答:1

我必须创建 while 循环来处理两个计数器值,这两个计数器值引用两个不同的最大计数器值 就像,i 和 j = 1,iMax=2 和 jMax=3

While循环包含抛出两种不同类型异常的代码,异常1增加计数器i,异常2增加计数器j

计数器达到最大限制后抛出异常

建议处理 While 循环的最有效方法

我已经尝试过,

While(i<=iMax && j<=jMax) {
   // process 
   catch(Exception1 ex) {
     if(i==iMax) throw ex;
     i++;
   }
   catch(Exception2 ex) {
     if(j==jMax) throw ex;
     j++;
   }
}
java spring-boot
1个回答
0
投票

此代码片段存在许多问题,可能会导致代码的功能和可维护性问题。

  1. 首先,抑制异常(就像您的例子一样)违背了 Java 中检查异常的预期用途。检查异常旨在表示方法的调用者应适当处理的预期异常情况。通过在没有适当处理的情况下抑制它们,您可以有效地忽略潜在的错误,这可能会导致意外的行为或数据损坏。

  2. 当任何异常发生时,被调用的方法负责创建一个带有堆栈跟踪的错误对象。抛出这个异常是一个复杂且昂贵的操作。 JVM 经过优化,可以在不发生异常的情况下保持快速运行。例外应该是例外。

  3. 此代码片段中缺乏显式迭代控制可能会导致无限循环。虽然每次执行代码时可能不会发生异常,但不能保证这种行为。

  4. 下面的代码片段是您意图的重构版本,您基本上尝试计算 type1 和 type2 类型的异常发生的次数,并且如果任何类型的异常达到其最大值,您将抛出它。

    While(i<=iMax && j<=jMax) {
        //  process
        } catch (ArithmeticException | NumberFormatException ex) {
            if (i == iMax || j == jMax) throw ex;
                if (ex instanceof ArithmeticException)
                    i++;
                else
                    j++;
                }
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.