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

// 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 处理并停止抛出错误。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!