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

Aar*_*ron 1 java

我试图从以下方法返回一个字符串.

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);
   }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

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

就个人而言,我只是catch完全删除该块,并throws为在体内抛出的任何异常添加声明.你并没有真正处理异常 - 你只是将它们打印出来并忽略它们,这很少是一个好主意.从开始捕捉Exception通常是一个非常糟糕的主意.

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