2012-01-15 82 views
1

我想从下面的方法返回一个字符串。如何返回try/catch语句中的字符串?

public String openCon() { 
    try { 
     Scanner scan = new Scanner(System.in); 
     URL sitex = new URL("http://" + scan.nextLine()); 
     URLConnection connection = sitex.openConnection(); 
     Object content = sitex.getContent(); 
     BufferedReader in = new BufferedReader(new InputStreamReader(sitex.openStream())); 
     String str; 
     String x = "1"; 
     while ((str = in.readLine()) != null) { 
      x += str; 
     } 
     in.close(); 
     return x; 

    } 
    catch(Exception e) { 
     System.out.println(e); 
    } 
} 
+2

这是什么问题? – talnicolas 2012-01-15 16:51:42

回答

13

这个问题不从try块返回 - 问题是,你是,如果一个异常被抛出不返回任何东西。你正在捕捉异常......但是在不返回任何东西的情况下到达方法的结尾。 (说得更多的技术术语:非空方法到底应不应该到达。)

个人而言,我只是删除catch块完全,并添加throws声明对这些内抛出的异常身体。你不是真的处理的例外 - 你只是打印出来,忽略它们,这是一个很好的主意。捕捉Exception通常是一个非常糟糕的主意开始。

顺便说一句,你应该finally块所以他们即使在异常关闭的情况下关闭BufferedReaderURLConnection值。我还建议将固定编码名称传递给InputStreamReader,或者使用更高级别的HTTP客户端API,它将使用响应中的内容类型标头。哦,并且在循环中使用StringBuilder而不是字符串连接。

+0

你正在离开我们其余的人不多评论:-) – Robin 2012-01-15 17:16:41

1

如果在return语句之前有一个异常,该方法不会返回任何东西。既然你没有真正处理这个异常,我建议你让它在更高的层次上冒泡并处理它。如果没有更好的地方,这可能是主要的方法。您需要将方法声明为throws IOException,并可能添加其他异常类。

此外,请使用try-with-resources确保您的实例(BufferedReaderInputStreamReader)正确关闭。

1

为什么不在try语句之前初始化该变量,并在它之后放置return语句?

0

你应该在catch块返回的东西,例如:

catch(Exception e) { 
     System.out.println(e); 
     return ""; 
    } 
0

用途:

String result = "" 
try{ 
    result = "OK"; 
}catch (Exception e){ 
    result = e.toString(); 
}finally{ 
    return result; 
}