带有try-catch块的无限循环的编译和返回值

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

我在尝试文件 I/O 时遇到了这个问题。该方法编译:

public static int testMethod1() {
        try {
            while (true);
        } catch (Exception e) {
            return 0;
        }
        
    }

虽然这两个没有:

public static int testMethod2() {
        try {
            while (true) { break; }
        } catch (Exception e) {
            return 0;
        }
        
    }
public static int testMethod3() {
        try {
            while (true) {
                if (false) {
                    break;                  
                }
            }
        } catch (Exception e) {
            return 0;
        }
        
    }

我无法理解这一点。第一种方法在逻辑上与第三种方法等效。编译器到底在做什么?

java exception return infinite-loop
1个回答
0
投票

第一种方法在逻辑上等价于第三种

事实并非如此。 if(false) 确实有影响。编译器不会在编译时对此进行评估,因此代码有可能到达

break
,在这种情况下,您不会返回任何内容(就像第二个片段中一样),这是实际的编译错误。

© www.soinside.com 2019 - 2024. All rights reserved.