Java代码跳过return语句

时间:2015-05-01 11:12:53

标签: java return try-catch bufferedreader

我有一个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;
}

任何线索?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这个怎么样 - 调用方法又取回了什么? This post表明这可能是一个编译器优化,它合并了两个return语句,在这种情况下,调试器看起来"返回null"语句已执行,但调用者实际上会收到您的JSON。

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