如何正确处理错误

时间:2014-08-11 07:06:27

标签: java

我是java的初学者,为webservice编写前端。我必须验证输入以获取用户的有用错误消息。目前它的工作原理如下:

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

for zip Codes.Using Objects声明返回类型不是我想要的(并且不鼓励),但我不确定我应该如何处理错误的输入而不是那个。我应该只为每个返回null异常和无效输入并在另一种方法中处理这些事情?

编辑:添加了实际抛出异常的内容......

2 个答案:

答案 0 :(得分:1)

是的,异常处理可能是一个比较棘手的事情(例如,如果一个来自C编程背景,我们曾经很高兴用< 0返回代码来指示错误的程序流)。 通常你可以通过捕获其他API来安全地使用:你将它们集成并将它们封装在你自己的异常中(有点掩盖它们),但是这样做不要忘记使用这个构造函数将原始异常链接到你自己的异常(和/或其衍生物:

public MyException(final String message, final Throwable cause) {
        super(message, cause);
}

肯定会看到很多:

catch (Exception) {
    return null;
}

等代码也是如此,我不会说这是“好”的面向对象,但它仍然很常见,可以在特殊场合使用。

而且,当你捕获异常时,它通常非常重要你做什么(如何处理),有人告诉我编程是关于错误控制的90%和关于功能的10%:)

以下是一些教程/资源:
http://docs.oracle.com/javase/tutorial/essential/exceptions/ http://howtodoinjava.com/2013/04/04/java-exception-handling-best-practices/

答案 1 :(得分:0)

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

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

    }
}