1

我正在尝试处理 Java 的错误处理。是否可以让小型 try/catch 块做一件事,然后将其操作的结果返回到主范围?

似乎一切都必须进入 try 块,这似乎有点奇怪。

我设置了以下测试:

public class test {
    public static void main(String[] args) {
        System.out.println(0-10);
        int guess;
        try {
            guess = 5;
        }
        catch(Exception ex) {
            System.out.println("bugger");
        }
        System.out.println(guess);
    }
}

只是为了举例,我声明了一个变量,然后在 try 块内为其赋值,但它似乎只存在于 try 块内。尝试在 try 之外打印它会导致错误。有没有办法从尝试中传递信息?

4

4 回答 4

2

它会导致错误,因为编译器guess在程序结束时尝试打印它时无法知道是否已初始化。如果在你的try块中抛出异常并且guess永远不会分配给任何东西怎么办?您必须首先在开始时将其分配给某个默认值,例如int guess = 0.

于 2012-10-03T01:31:16.800 回答
2

使用您现有的代码,如果您尝试访问guesstry 块之外的变量,编译器会告诉您:“guess变量可能未初始化”。

解决方案:直接在 try 块之外分配值,如下所示:

int guess = 5;

但我想这样做会让你的 try/catch 没用。

因此,根据您对样本的真正期望,例如,您可以简单地将其初始化为 0。

public class test {
    public static void main(String[] args) {
        System.out.println(0-10);
        int guess = 0;
        try {
            guess = 5;
        }
        catch(Exception ex) {
            System.out.println("bugger");
        }
        System.out.println(guess);
    }
}
于 2012-10-03T01:33:43.883 回答
1

根据定义,try-catch 块不能保证完整执行。结果,编译器不知道guess已经设置5为确定,即使它显然会。因此,由于本地字段必须在使用之前进行初始化,编译器不知道它guess肯定会被赋值。

要解决这个问题,您可以简单地设置guess为默认值,以便编译器知道它已被初始化。

//...
int guess = 0;
try {
    guess = 5;
}
//...
于 2012-10-03T01:36:22.587 回答
0

从概念上讲,如果操作您的变量guess 可能会由于错误而引发异常,那么在相应的catch 块中捕获它之后继续操作它是没有意义的。

如果操纵猜测不会触发任何类型的异常,只需在 try 块之外处理它就可以了。

您提供的代码模棱两可,因为如果引发并捕获异常,则程序将没有一致的值。

于 2012-10-03T01:36:23.987 回答