【问题标题】:Java code is jumping over return statementJava 代码正在跳过 return 语句
【发布时间】:2015-07-11 05:22:57
【问题描述】:

我有一个 try/catch 循环,这是最后一部分:

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

    String jsonResponse = reader.readLine();

    Log.d("BSARD",jsonResponse);

    return jsonResponse;
}
catch (Exception e) {
    Log.d("BSARD","Something weird happened");
}
return null;

当我在调试器中运行时,它会执行直到“Log.d("BSARD",jsonResponse)”的所有操作,但会直接跳转到“return Null”。我已经检查了 jsonResponse 是一个有效的字符串 - 因此我将 Log.d 语句放在那里以便我可以暂停代码并检查变量。如果我在“Log.d("BSARD",jsonResponse)”行之后添加更多代码,它会执行得很好——它永远不会执行“return jsonResponse”。

我完全被难住了。我不知道为什么会这样,因为我在另一个运行良好的 java 类中有一段相同的代码。

我已经尝试清理构建并重建项目几次,但无济于事。我还修改了代码,将 null 返回移动到 catch 循环中,并在它前面放置了一个附加语句,它仍然跳转到 null 而不执行前面的任何 catch 代码。堆栈跟踪中没有任何内容,实际上没有抛出异常。

因此,无论 null 位于 catch 语句之内还是之外,它都会直接跳转到它。

这是代码目前的样子......

    HttpClient client = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(u);
    httppost.setEntity(new UrlEncodedFormEntity(pairs));
    HttpResponse response = client.execute(httppost);

    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

    String jsonResponse = reader.readLine();
    Log.d("BSARD",jsonResponse);
    return jsonResponse;
}
catch (Exception e) {
    e.printStackTrace();
    Log.d("BSARD","Something weird happened");
    return null;
}

有什么线索吗?

【问题讨论】:

  • 您尝试清理项目了吗?项目 > 清理。
  • 你有什么例外吗?
  • 是跳转到return null,还是跳转到方法的右括号?调试器可能会跳转到右括号以指示它正在离开该方法,而不管执行的 return 语句在哪里。
  • 尝试在两个返回语句之前添加System.out.println("got here");(使文本不同,以便您知道它到达了哪个)并查看哪一行得到输出。如果两者都没有,那么您的代码由于某种原因没有重新编译。否则它应该会给你一个关于正在发生的事情的线索。
  • 您可能没有构建项目,请尝试重新构建它。

标签: java return try-catch bufferedreader


【解决方案1】:

尝试清理项目和服务器!!!您的代码可能没有正确构建。

【讨论】:

  • 我很好奇代码如何无法正确构建并产生这些结果?你的理论是他正在运行一个版本的代码,其中删除了第一个 return 语句?
  • @Edd 可能是在运行没有返回的早期版本,或者发生了异常。
  • @Alex 这是我能想到的唯一可能的解释。如果发生异常,则会打印相应的日志行。
【解决方案2】:

这个怎么样 - 调用方法返回什么? This post 建议这可能是合并两个返回语句的编译器优化,在这种情况下,调试器会显示“返回 null”语句已执行,但调用者实际上会收到您的 JSON。

Java 允许编译器进行更改以优化您的代码,前提是这不会改变其运行时行为。

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多