Catch块避免编译错误?

时间:2015-12-17 01:36:09

标签: exception compiler-errors try-catch unreachable-code

我有以下代码,它给了我一个编译错误。

  

// 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块来解决我的问题?

1 个答案:

答案 0 :(得分:0)

因为在program1中,编译器确信执行流程永远不会到达“System.out.println(”Hi“);”因为既没有阻挡尝试也没有一些条件 抛出声明,

你也可以通过写一些带变量的条件来避免这个错误,就像这样抛出语句

        int a =0;

        if(a==0)
        throw new NullPointerException();

在program2中,当然catch块永远不会执行,但是编译器假定有特定的catch来尝试处理并且会停止抛出错误。