我正在尝试从以下方法返回一个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);
}
}
答案 0 :(得分:13)
问题不是从try
块返回 - 问题是如果抛出异常,不返回任何内容。您正在捕获异常...但是在没有返回任何内容的情况下到达方法的末尾。 (用更多的技术术语来说:非空方法的结尾不应该是可达的。)
就个人而言,我只是完全删除catch
块,并为正文中抛出的任何异常添加throws
声明。你并不是真的处理例外 - 你只是将它们打印出来并忽略它们,这很少是一个好主意。从一开始就抓住Exception
通常是个坏主意。
顺便说一句,您应还关闭BufferedReader
块中的URLConnection
和finally
值,这样即使是例外。我还建议将固定的编码名称传递给InputStreamReader
,或者使用更高级别的HTTP客户端API,它将使用响应中的内容类型标头。哦,并在循环中使用StringBuilder
而不是字符串连接。
答案 1 :(得分:1)
如果在return语句之前有异常,则该方法不会返回任何内容。由于您并未真正处理异常,我建议您让它冒泡并在更高级别处理它。如果没有更好的地方,这可能是主要的方法。您需要将方法声明为throws IOException
,并可能添加其他异常类。
另外,使用try-with-resources确保您的实例(BufferedReader
和InputStreamReader
)正确关闭。
答案 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;
}