Java 如何正确处理错误

Java 如何正确处理错误,java,Java,我是一名java初学者,正在为Web服务编写前端。我必须验证输入,以便为用户获取有用的错误消息。目前它的工作方式如下: public Object zipVal(String zip) { try { if (zip.length() == 5) { val.setZip(Integer.parseInt(zip)); return val.getZip(); } else

我是一名java初学者,正在为Web服务编写前端。我必须验证输入,以便为用户获取有用的错误消息。目前它的工作方式如下:

public Object zipVal(String zip)
{
    try
    {
        if (zip.length() == 5)
        {
            val.setZip(Integer.parseInt(zip));
            return val.getZip();
        } else
        {
            return lengthError;
        }

    } catch (NumberFormatException e)
    {
        return formatError;
    }
}
对于邮政编码。使用对象来声明返回类型不是我想要的(而且我不鼓励这样做),但我不确定我应该如何处理除此之外的错误输入。我应该只为每个异常和无效输入返回null,并用另一种方法处理这类事情吗


编辑:添加了一些实际引发异常的内容…

如果返回值,则无需处理异常。最好声明该方法可能引发异常

NumberFormatException是一个RunTimeException。因此,如果您希望处理它,那么最好返回一个无效的zip(比如-1),让调用方知道出现了问题

否则,声明如果发生NFE,将引发自定义异常

这个片段可能很有用

public int setZipVal(String zip) // throws CustomException
{
    try
    {
        if (zip.length() == 5)
        {
            val.setZip(Integer.parseInt(zip));
            return val.getZip();
        } 

    } catch (NumberFormatException e)
    {
       // Log the error and return invalid zip
       return -1;

       // OR throw custom exception
       throw new CustomException("Length Error"));

    }
}

是的,异常处理可能是更棘手的事情之一(如果一个人来自C编程背景,例如,我们曾经很高兴用< 0返回代码来指示错误的程序流)。 通常,通过捕获与之集成的其他API并将其封装在自己的异常中(某种程度上屏蔽它们),您会非常安全,但这样做时,不要忘记使用此构造函数(和/或此类构造函数的派生)将原始异常链接到您自己的异常中:

人们肯定会看到很多:

catch (Exception) {
    return null;
}
在代码中,我不会说这是“好的”面向对象,但它仍然很常见,可以在特殊场合使用

而且,当您捕获异常时,您所做的事情(如何处理)通常非常重要,有人告诉我编程90%与错误控制有关,10%与功能有关:)

以下是一些教程/资源:

您需要了解异常,返回
null
实际上取决于您的逻辑。您不会返回异常。你就扔吧。因此,您可以从方法中返回字符串而不是对象。您应该抛出扩展
Exception
的自定义类,并在更高的层中处理此异常,以便向用户显示适当的错误。哦,我使用了错误的示例。我使用Integer.parseInt()/Double.parseDouble()还有一些输入如果输入类型错误,则会返回异常。正如@TheLostMind所说,抛出异常和返回值是两件截然不同的事情。第一步是确定返回什么类型的对象以及要抛出什么类型的异常(如果有)。
catch (Exception) {
    return null;
}