java do while missing return语句

hrysbysz  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(446)

我有一个方法,它提示return语句丢失,但我不认为 return -1 将被执行。有人能告诉我为什么吗?

private int loop() {
    int retryTimes = 2;
    do {
        try {
            // simulate real business
            int value = new Random().nextInt(3);
            if (value % 3 != 0) {
                throw new RuntimeException();
            }
            return value;
        } catch (Exception e) {
            if (retryTimes <= 0) {
                throw e;
            }
        }
    } while (retryTimes-- > 0);
    // if below line not exists; prompt error: missing return statement
    return -1;
}
7fyelxc5

7fyelxc51#

java编译器怀疑 while 循环迭代2次以上,该行 return -1 会被联系到的。而且,如果没有 return 声明,那就有问题了。
实际代码的逻辑不一定允许这一点对编译器来说并不重要。总是会有意外的异常,因此应该在方法的末尾,在循环之外有一个catch all return语句。

7vhp5slm

7vhp5slm2#

可以像这样将return语句放在catch块中,因为成功执行时返回值,失败时也需要返回值。

private int loop() {
        int retryTimes = 2;
        do {
            try {
                // simulate real business
                int value = new Random().nextInt(3);
                if (value % 3 != 0) {
                    throw new RuntimeException();
                }
                return value;
            } catch (Exception e) {
                if (retryTimes <= 0) {
                    throw e;
                }
                return -1;
            }
        } while (retryTimes-- > 0);
    }

相关问题