这个问题在接受采访时被问到我。在下面的代码段中,异常发生在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");
}
}
任何人都可以提供帮助。提前谢谢。
答案 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