try-catch对异常继续执行



这个问题是在一次面试中问我的。在下面的代码段中,异常发生在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");
        }
    }

有谁能帮忙吗。提前谢谢。

首先,异常发生在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");
        }
    }

或者提示

第三行应该在捕获块本身中

 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");
        }
    }

还有其他方法可以做到这一点,例如最终阻止等。但由于所提供的信息量有限,并且目标是使其发挥作用,以上就足够了。

您可以这样做:

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");
        }
    }

Thorny片段,问题是:

  • 当你在这里破坏一个内部地址时会发生什么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

最新更新