Java 获取null时如何引发异常

Java 获取null时如何引发异常,java,exception,Java,Exception,当我想在数据库中创建订单时,我需要通过goodNo查找货物的名称。goodNo是客户提供的供应商。但是goodNo不在我的数据库中。因此,当它返回时,我会得到一个空值。我应该抛出什么类型的异常?IllegaLugementException?NullPointException?或其他?您可以使用一般异常,如: 道例外 例: 当异常是一个有效的用例(db中没有的项)时,我不鼓励使用它。相反,我建议考虑使用可选作为返回值。这表明一个方法的结果可能是空的 选中此项查看具有类似示例的博客视情况而定,这

当我想在数据库中创建订单时,我需要通过goodNo查找货物的名称。goodNo是客户提供的供应商。但是goodNo不在我的数据库中。因此,当它返回时,我会得到一个空值。我应该抛出什么类型的异常?IllegaLugementException?NullPointException?或其他?

您可以使用一般异常,如: 道例外

例:


当异常是一个有效的用例(db中没有的项)时,我不鼓励使用它。相反,我建议考虑使用可选作为返回值。这表明一个方法的结果可能是空的


选中此项查看具有类似示例的博客

视情况而定,这主要是您根据上下文的选择。您也可以创建自己的异常,使其更加具体。但这是基于观点的。在你的情况下,听起来IllegalArgument比NullPointer更有帮助,因为如果其他人使用你的代码并得到IllegalArgumentException,他可能会意识到他的正确性,因为这是他的论点之一,但NullPointerException可能会让他相信他的论点是无效的,事实并非如此。不管怎样,我同意AxelH所说的,只写我自己的例外:关于空对象模式的数据是什么?这是一种选择吗?我不会使用非法的论点。允许的参数未定义为常量,而是从数据库中加载。当你从数据库中得到一个空值时,抛出一个npe就更整洁了。怎么样?“由各种访问器方法抛出,以指示所请求的元素不存在。”但这只是业务异常。我认为,DAOException可能会描述异常my bug或某些SQL异常或DBExceptionYeah,但它有时会制造麻烦。例如,方法A->方法B->方法C->…->方法G。在方法G中,我得到空值,然后返回可选值。然后我需要检查从A到G的所有方法中的返回值。这会使我的代码变脏。使用异常会使这有所不同吗?我认为检查一个可选的情况比一系列的尝试捕获更脏,而且它更有效,因为即使没有抛出异常,尝试捕获也会导致开销。另请参见,当我在G中抛出运行时异常时,我只需要捕获a中的异常。这使从B到G的方法更干净。我已经考虑了异常中的开销,异常永远不会抛出异常,除非我们的数据库被异常修改。我只是想做些检查。我只是在“用Java思考”中得到了这个意见.作为一名有一年Java经验的初学者。我需要向Bruce Eckel学习。开销在try语句中,而不仅仅是在出现异常时。但它将相对较小,我认为其他原因更有效,不将异常用于控制流。这是一个有趣的讨论:
public String Method(String atr, double atr2) throws DAOException { 

    try {

        /*you  SQL Query*/

    } catch (Exception e) {
        logger.error("[" + methodName + "] Error: ", e);
        new DAOException( e);
    } finally {
        close(methodName, rs, stmt, conn);
    }
}