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