Java嵌套try catch块无法访问的问题

时间:2013-05-15 01:20:33

标签: java try-catch

这是我的代码的一部分......当我想编译它时  它始终显示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());
    }

2 个答案:

答案 0 :(得分:1)

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

  1. 如果Statement 3是唯一一个调用抛出SelfDefineException的方法,则第二个catch无法访问,因为上面的语句不能抛出它。
  2. 如果Statement 3不包含对抛出SelfDefineException的方法的调用,则第一个catch无法访问。
  3. 如果没有包含对方法定义中声明“throws SelfDefineException”的方法的调用,则两个catch块都无法访问。

答案 1 :(得分:0)

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

可能发生的事情是,在其中一个try块中,没有任何东西抛出异常。

另外,为什么要使用

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

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

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

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