如何处理java代码的错误

时间:2011-05-23 09:57:19

标签: java exception-handling try-catch

我是java的新手,并试图测试/改进我的程序。

它适用于我的计算机,但不适用于客户端,所以我尝试进行错误处理但不确定语法。

如何将try / catch放在for和while循环以及if语句中。它会像任何其他命令一样进入它们内部吗?

for(int eight = 0; eight < 8; eight++)
            {
                message = in.readLine();
                LOGGER.fatal(eight);
                LOGGER.fatal(message);

                if(message.contains("Content-Length"))
                {
                    message.getChars(16, 20, size, 0); THIS LINE                
                }
            }

这是我正在使用的一个例子。如何在标记的行中添加try / catch。

或者您有更好的方法来处理异常吗?

5 个答案:

答案 0 :(得分:1)

  

如何在标记的行中添加try / catch。

如果您不想在异常时突破循环,则只在try / catch中封装标记的行。

for(int eight = 0; eight < 8; eight++) {

    message = in.readLine();
    LOGGER.fatal(eight);
    LOGGER.fatal(message);

    if(message.contains("Content-Length")) {
        try {
            message.getChars(16, 20, size, 0); THIS LINE                
        } catch (YourException e) {
            // Handle the exception
        }
    }
}

答案 1 :(得分:1)

只需这样做。

for(int eight = 0; eight < 8; eight++)
            {
                message = in.readLine();
                LOGGER.fatal(eight);
                LOGGER.fatal(message);

                if(message.contains("Content-Length"))
                {   
                   try {
                    message.getChars(16, 20, size, 0); 
                    }
                  catch(Exception e) {
                        // Print all exception messages here ...
                  }
                }
            }

记住:总是尝试在catch中使用特定的异常类而不是'Exception'作为一种很好的编程习惯。

答案 2 :(得分:1)

您问题的简单答案是:

try {
    for (int eight = 0; eight < 8; eight++) {
        message = in.readLine();
        if (message.contains("Content-Length")) {
           message.getChars(16, 20, size, 0); THIS LINE                
        }
    }
} catch (StringIndexOutOfBoundsException ex) {
    Logger.fatal("I've got a bug in my program", ex);
}

更好的答案是您需要解决异常的原因。我敢打赌,尝试提取内容长度的代码正在对输入行的“大小”字段中的字符数进行无效假设。更强大的方法是这样的:

    int pos = message.indexOf("Content-Length ");
    if (pos >= 0) {
        String size = message.substring(pos + "Content-Length ".length());
    }

显然,这会分配一个额外的字符串,但它具有IT工作的优势。

答案 3 :(得分:1)

你的try / catch行去哪里取决于你想要处理什么。

您可能希望以相同的方式处理整个方法抛出的所有异常(例如将更易读的版本传递给某些输出和/或将有意义的错误消息传递给用户) - 在这种情况下,您需要做这样的事情:

public void method() {
    try {
        // entire method code here
    }
    catch (Exception e) {
        // handle exception here
    }
}

或者,您可能希望处理特定行抛出的异常(例如处理打开文件时抛出的特定异常),在这种情况下,您只使用try / catch语句包围该行。< / p>

答案 4 :(得分:0)

您只需将可能抛出异常的行包围try - 块并在catch - 块中捕获抛出的异常。请参阅Java Tutorial