Java NullPointerException,我可以使用抛出,因为我;期望;代码可能会因为NullPointerException而崩溃?

Java NullPointerException,我可以使用抛出,因为我;期望;代码可能会因为NullPointerException而崩溃?,java,exception,try-catch,Java,Exception,Try Catch,当方法体中的代码可能由于NullPointerException而崩溃时,我可以用throws声明我的方法吗 我在这个方法中有类似于a.getB().getC()的代码 编辑: 我试过使用示例代码 class B { public void methodB() {} } class A { public void methodA(B b) throws NullPointerException { b.methodB(); } } @Test pub

当方法体中的代码可能由于NullPointerException而崩溃时,我可以用throws声明我的方法吗

我在这个方法中有类似于
a.getB().getC()
的代码

编辑:

我试过使用示例代码

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);
}

测试已成功。

您的方法是否引发异常

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


如果它这样做,那么当方法抛出异常时,您可以捕获异常

public static void main(String args[]){
    try{
        boolean isOK = getC(); 
    }catch(Exception e){
        System.out.println(e.getMessage());
    }
}
您可以使用可选的

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

return opt.orElseThrow(NullPointerException::new);

}
public YourObjectC getC(){
YOurObjectA=新的YOurObjectA();
Optional opt=可选的。不可用的(a)
.map(YOurObjectA::getB)
.map(YourObjectB::getC);
返回opt.orelsetrow(NullPointerException::new);
}
方法将返回对象C,但如果对象为null,则将抛出null指针exc,您不应该这样做


如果该值可能为空,则在此情况下必须验证并应用业务规则。否则,我认为最好检查必须具有的参数是否为null,然后抛出一个
IllegalArgumentException
。例如,您可以在Javadoc上描述这种行为。但是声明一个
方法抛出
是没有用的。

你试过了吗?我能得到一个答案吗?请浏览这两页-不建议捕获,但你可以看到这一点
public YourObjectC getC(){
YOurObjectA a = new YourObjectA();
Optional<YourObjectC> opt = Optional.ofNullable(a)
                                    .map(YOurObjectA::getB)
                                    .map(YourObjectB::getC);

return opt.orElseThrow(NullPointerException::new);

}