尝试捕获继续执行异常

时间:2012-07-17 13:08:19

标签: java exception exception-handling

这个问题在接受采访时被问到我。在下面的代码段中,异常发生在try块的第三行。问题是如何使第4行执行。第三行应该在catch块本身。他们给了我一个“使用投掷和投掷”的提示。

    public void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
            System.out.println("Stop");

        }catch(NullPointerException e){
            System.out.println("Exception");
        }
    }

任何人都可以提供帮助。提前谢谢。

3 个答案:

答案 0 :(得分:6)

首先,异常发生在try块的第三行 - out.toString(),而不是第二行。

我假设你想要第四行执行(即打印停止)

如果您想简单地打印停止,有不同的方法可以执行下一行(打印停止):

 public static void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
            System.out.println("Stop");

        }catch(NullPointerException e){
            System.out.println("Stop");
            System.out.println("Exception");
        }
    }

或给出提示

  

第三行应该在catch块本身

 public static void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            Exception e = null;

            try
            {
                out.toString();
            }
            catch(Exception ex)
            {
                e = ex;
            }
            System.out.println("Stop");

            if(e != null)
                throw e;

        }catch(Exception e){
            System.out.println("Exception");
        }
    }

还有其他方法可以做到这一点,例如。最后阻止等等。但由于提供的信息量有限且目标是使其有效 - 上述内容应该足够了。

答案 1 :(得分:2)

你可以这样做:

public void testCase() throws NullPointerException{
        try{
            System.out.println("Start");
            String out = null;
            out.toString();
        }catch(NullPointerException e){
            System.out.println("Exception");
        } finally {
            System.out.println("Stop");
        }
    }

答案 2 :(得分:0)

棘手的片段,问题是:

  • 在此处崩溃内部地址时会发生什么 out输出已替换为String,但它是null
  • 是否可以打印null String,并附上一个片段以集中注意力。

您可以重写一行: ("" + out).toString(); 以传递给第一行。

'原样'这不是技术面试,除非你必须提出第二个问题,关于你与第三行的关系。

测试是:候选人在没有看到问题的所有部分时,或者当问题嵌套时,他们能够帮助他们理解真正的问题。

评论后编辑

除非您对该行发表评论,否则您必须捕获损坏的代码:

try {
    // Corrupted code to avoid 
    String out = null;
    out.toString();
} catch (Exception e) {
    // Careful (and professionnal) signal
    System.out.println("out.toString() : code to repair.");
} 
System.out.println("Stop"); // will appear to console