在java中从catch/finally返回值?
我有下面的代码。若查询在无异常的情况下执行,则应返回true,若引发任何异常,则应返回false。最后,应该关闭语句和连接。 我的问题是我应该在哪里写返回声明?是最终还是最后?在下面的代码中,如果执行查询,我将在try中返回true,如果抛出任何异常,则在catch中返回false。我的问题是,若抛出任何异常,是否会返回false并关闭连接和语句在java中从catch/finally返回值?,java,exception,jdbc,Java,Exception,Jdbc,我有下面的代码。若查询在无异常的情况下执行,则应返回true,若引发任何异常,则应返回false。最后,应该关闭语句和连接。 我的问题是我应该在哪里写返回声明?是最终还是最后?在下面的代码中,如果执行查询,我将在try中返回true,如果抛出任何异常,则在catch中返回false。我的问题是,若抛出任何异常,是否会返回false并关闭连接和语句 try { statement = connection.createStatement(); sta
try {
statement = connection.createStatement();
statement.executeQuery("select * from dual");
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally{
try {
statement.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在这两种情况下,都要在try-catch块之外、它下面写永远不要在FINALLY块中使用RETURN,因为该RETURN语句将始终执行,这会破坏try块中的常规RETURN语句 它不会像你写的那样工作。要使用
finally
块正确执行返回,您需要保持状态,即
boolean result = false;
try
{
// all good
result = true;
}
catch(...)
{
// crap
result = false;
}
finally
{
// close
}
return result;
这假设您希望执行finally
块中的内容并返回正确的结果
我应该在哪里写返回语句
把它放在最后,在最后的}
之后:
try {
...
return true;
} catch (SQLException e) {
e.printStackTrace();
} finally {
...
}
return false; // <===== HERE
试试看{
...
返回true;
}捕获(SQLE异常){
e、 printStackTrace();
}最后{
...
}
返回false;// 更好的做法是尝试使用JDK 7,并在资源中使用新的try。您可以尝试
boolean returnVal = false
try {
statement = connection.createStatement();
statement.executeQuery("select * from dual");
returnVal = true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
returnVal = false;
} finally{
try {
statement.close();
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
returnVal = false;
}
return returnVal;
}
我想它就在那里。不过,您的资源逻辑并不好。如果你使用java 7,可以考虑使用RealCues。你为什么不自己试试呢?在每个可能的执行路径上放置一个System.out.println
语句,然后自己调试?这样你会更好地学习和记忆它。是的,我们为这种情况提供了资源。请参阅。不确定您想说什么,但即使您从try
或catch
块返回,最终也将始终执行。