NullPointerException,我可以使用throws因为我“期望”代码可能会因为NullPointerException而崩溃吗?

时间:2017-12-14 06:10:11

标签: java exception try-catch

当方法体中的代码因NullPointerException而崩溃时,我可以使用throws声明我的方法

我在此方法中有a.getB().getC()之类的代码

修改

Catching nullpointerexception in Java

我尝试过示例代码,

class B {
    public void methodB() {}
}

class A {
    public void methodA(B b) throws NullPointerException {
        b.methodB();
    }
}

@Test
public void test_null_pointer() {
    boolean thrown1 = false;
    boolean thrown2 = false;
    A a = new A();

    try {
        B b = new B();
        a.methodA(b);
    } catch (NullPointerException n) {
        thrown1 = true;
    }

    try {
        a.methodA(null);
    } catch (NullPointerException n) {
        thrown2 = true;
    }

    assertFalse(thrown1);
    assertTrue(thrown2);
}

测试成功了。

3 个答案:

答案 0 :(得分:1)

你的方法抛出异常吗?

public static boolean getC() throws Exception{
    if(Some Condition)
        throw new Exception("Some Error");
    else
        return true;
}

public static boolean getC() throws Exception{
    try{
        ... Do Something ...
        return true;
    }catch(Exception e){
        throw e
    }
}

如果是,则可以在方法抛出异常时捕获异常。

public static void main(String args[]){
    try{
        boolean isOK = getC(); 
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
}

答案 1 :(得分:1)

您可以使用可选

public YourObjectC getC(){
YOurObjectA a = new YourObjectA();
Optional<YourObjectC> opt = Optional.ofNullable(a)
                                    .map(YOurObjectA::getB)
                                    .map(YourObjectB::getC);

return opt.orElseThrow(NullPointerException::new);

}

Method将返回对象C,但如果object为null将抛出Null Pointer exc

答案 2 :(得分:0)

你不应该。

如果此值可能为null,则必须在此情况下验证并应用业务规则。否则,我认为检查必须参数是否为null然后抛出IllegalArgumentException是一种很好的做法。例如,您可以在Javadoc上描述此行为。但宣布method throws是没用的。