我有以下代码,它给了我一个编译错误。
// Program1 - 编译错误
public class ExceptionExample {
public static void main(String[] a) {
try {
method();
} catch (ClassCastException p) {} catch (Exception e) {
System.out.println(" Exception");
}
}
public static void method() {
try {
throw new NullPointerException();
} finally {
System.out.println("Hello");
}
System.out.println("Hi");
}
}
但是在添加了一些catch块后,以下代码可以正常工作。
//程序2 - 无编译错误
public class ExceptionExample {
public static void main(String[] a) {
try {
method();
} catch (ClassCastException p) {
} catch (Exception e) {
System.out.println(" Exception");
}
}
public static void method() {
try {
throw new NullPointerException();
}
// Below catch block has been added
catch (ClassCastException p) {
}
finally {
System.out.println("Hello");
}
System.out.println("Hi");
}
}
/////////////////////////////////////////////// ///////////// “System.out.println(”Hi“)无法访问的代码;” 我想知道,如何添加不必要的catch块来解决我的问题?
答案 0 :(得分:0)
因为在program1中,编译器确信执行流程永远不会到达“System.out.println(”Hi“);”因为既没有阻挡尝试也没有一些条件 抛出声明,
你也可以通过写一些带变量的条件来避免这个错误,就像这样抛出语句
int a =0;
if(a==0)
throw new NullPointerException();
在program2中,当然catch块永远不会执行,但是编译器假定有特定的catch来尝试处理并且会停止抛出错误。