Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中从catch/finally返回值?_Java_Exception_Jdbc - Fatal编程技术网

在java中从catch/finally返回值?

在java中从catch/finally返回值?,java,exception,jdbc,Java,Exception,Jdbc,我有下面的代码。若查询在无异常的情况下执行,则应返回true,若引发任何异常,则应返回false。最后,应该关闭语句和连接。 我的问题是我应该在哪里写返回声明?是最终还是最后?在下面的代码中,如果执行查询,我将在try中返回true,如果抛出任何异常,则在catch中返回false。我的问题是,若抛出任何异常,是否会返回false并关闭连接和语句 try { statement = connection.createStatement(); sta

我有下面的代码。若查询在无异常的情况下执行,则应返回true,若引发任何异常,则应返回false。最后,应该关闭语句和连接。 我的问题是我应该在哪里写返回声明?是最终还是最后?在下面的代码中,如果执行查询,我将在try中返回true,如果抛出任何异常,则在catch中返回false。我的问题是,若抛出任何异常,是否会返回false并关闭连接和语句

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
块返回
,最终
也将始终执行。