-1

这是我的代码的一部分……当我想编译它时,它总是显示 SelfDefineException 的 Unreachable catch 块。从 try 语句体中永远不会抛出此异常

我该如何解决它,任何人都可以帮助我,因为我已经尝试了数百万次来解决它

    try
    {
        Statement 1;
        Statement 1;
        Statement 1;
        Statement 1;

        try
        {
           Statement 3;
        }
        catch (SelfDefineException er)
        {
            String error = er.getMessage();

            System.out.print("issue: \n\t(" +er.getMessage() + ")");
                result = false;
            }
        }
    }
    catch (SelfDefineException er)
    {
        System.out.print("failed: " + er.getMessage());
    }
4

2 回答 2

1

如果 SelfDefineException 是一个检查异常(它可能是,除非它扩展 RuntimeException),你应该捕获它或声明它(http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html)。这里有三种可能的情况可能会给出“无法访问的代码”:

  1. 如果 Statement 3 是唯一调用抛出 SelfDefineException 的方法的语句,则第二个 catch 是无法访问的,因为上面的语句不能抛出它。
  2. 如果语句 3 不包含对引发 SelfDefineException 的方法的调用,则第一个 catch 是无法访问的。
  3. 如果没有包含对在其方法定义中声明“抛出 SelfDefineException”的方法的调用,则两个 catch 块都无法访问。
于 2013-05-15T01:33:36.300 回答
0

花括号应该产生一个解析错误,而不是一个无法到达的语句错误。

可能发生的情况是,在其中一个 try 块中,一开始没有任何东西引发异常。

另外,为什么要使用

System.out.print("issue: \n\t(" +er.getMessage() + ")");

当您已经er.getMessage()在之前的行中声明了一个包含变量时?

您应该只使用该变量,它至少会使代码更具可读性。

System.out.print("issue: \n\t(" + error + ")");
于 2013-05-15T01:43:59.690 回答