我是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。
或者您有更好的方法来处理异常吗?
答案 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