如何在try / catch语句中返回String?

时间:2012-01-15 16:50:56

标签: java

我正在尝试从以下方法返回一个String。

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

5 个答案:

答案 0 :(得分:13)

问题不是从try块返回 - 问题是如果抛出异常,返回任何内容。您正在捕获异常...但是在没有返回任何内容的情况下到达方法的末尾。 (用更多的技术术语来说:非空方法的结尾不应该是可达的。)

就个人而言,我只是完全删除catch块,并为正文中抛出的任何异常添加throws声明。你并不是真的处理例外 - 你只是将它们打印出来并忽略它们,这很少是一个好主意。从一开始就抓住Exception通常是个坏主意。

顺便说一句,您应关闭BufferedReader块中的URLConnectionfinally值,这样即使是例外。我还建议将固定的编码名称传递给InputStreamReader,或者使用更高级别的HTTP客户端API,它将使用响应中的内容类型标头。哦,并在循环中使用StringBuilder而不是字符串连接。

答案 1 :(得分:1)

如果在return语句之前有异常,则该方法不会返回任何内容。由于您并未真正处理异常,我建议您让它冒泡并在更高级别处理它。如果没有更好的地方,这可能是主要的方法。您需要将方法声明为throws IOException,并可能添加其他异常类。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您应该在catch块中返回一些内容,例如:

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

答案 4 :(得分:0)

使用:

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