0

This question was asked to me on an interview. In the below snippet the exception occur in the third line of the try block. The question was how to make the 4th line execute. The third line should be in the catch block itself. They gave me an hint 'using throw and throws'.

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

Can any one help. Thanks in advance.

4

3 回答 3

6

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

我假设您希望执行第四行(即打印停止)

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

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

还有其他方法可以做到这一点,例如。finally 块,等等。但是由于给出的信息量有限并且以使其工作为目标 - 以上应该就足够了。

于 2012-07-17T13:18:33.283 回答
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");
        }
    }
于 2012-07-17T13:38:37.360 回答
0

棘手的片段,问题是:

  • 当你崩溃一个内部地址时会发生什么,这里的 out输出,被替换为Stringbut it is 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
于 2012-07-17T13:39:02.840 回答