exception - 捕获 block 避免编译错误?

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

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

// Program1 -- Compilation error


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 block 之后,下面的代码就可以工作了。

// Program 2 - No Compilation error


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 block 如何解决我的问题?

最佳答案

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

您还可以通过编写一些带有变量的条件来像这样抛出语句来避免此错误

        int a =0;

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

在 program2 中,当然 catch block 永远不会执行,但编译器假定存在特定的 catch 供 try 处理并停止抛出错误。

关于exception - 捕获 block 避免编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34325238/

相关文章:

c++ - 如何在 C++ 中实现堆栈跟踪(从抛出到捕获站点)?

c++ - 跳过 GDB 中的 C++ throw 语句

c# - 在这种情况下,一般异常处理不是那么糟糕吗?

c - 如何修复c qsort函数中的 "discard const"(该数组是指针数组),可能与对指针的理解有关

go - Go 中基于错误类型的细粒度错误处理

c++ - 当 io_service.run() 在 try-catch 之后时,boost::asio 中的 async_wait() 会立即触发

c++ - 标记为 noexcept 的函数内部可以有异常吗?

asp.net - 发布asp.net网站以在本地IIS服务器上进行测试

java - Hibernate.INTEGER不可用,当Hibernate版本升级到4.2.0.CR1时

java - java 中的整个 try/catch 语句需要大括号吗?真的很奇怪的东西