java-放置在何处;return";试一试,接住,最后阻挡?
我跟踪了Spring框架的源代码,发现了一些对我不友好的代码。 我想我必须把“return”语句放在finally块中,但这段代码把它放在try块中 这是源代码。(这是org.springframework.jdbc.core.JdbcTemplate的一部分)java-放置在何处;return";试一试,接住,最后阻挡?,java,try-catch,Java,Try Catch,我跟踪了Spring框架的源代码,发现了一些对我不友好的代码。 我想我必须把“return”语句放在finally块中,但这段代码把它放在try块中 这是源代码。(这是org.springframework.jdbc.core.JdbcTemplate的一部分) 629公共T查询( 630 PreparedStatementCreator psc、final PreparedStatementSetter pss、final ResultsTextTractor rse) 631抛出DataAc
629公共T查询(
630 PreparedStatementCreator psc、final PreparedStatementSetter pss、final ResultsTextTractor rse)
631抛出DataAccessException{
632
633 Assert.notNull(rse,“ResultsTextRactor不能为null”);
调试(“执行准备好的SQL查询”);
635
636返回执行(psc,新的PreparedStatementCallback(){
637公共T doInPreparedStatement(PreparedStatement ps)引发SQLException{
638结果集rs=null;
639试试看{
640如果(pss!=null){
641 pss.设定值(ps);
642 }
643 rs=ps.executeQuery();
644结果集rsToUse=rs;
645如果(nativeJdbcExtractor!=null){
646 rsToUse=nativeJdbcExtractor.getNativeResultSet(rs);
647 }
648返回rse.extractData(rsToUse);
649 }
最后{
651 JdbcUtils.closeResultSet(rs);
652 if(参数处理器的pss实例){
653((参数处理器)pss).cleanupParameters();
654 }
655 }
656 }
657 });
658 }
正如您在第648行看到的,它在try块中返回值。在最后一个街区里什么也没有了。我不知道这是怎么回事?即使您将return放在try块中,java仍会在try块中执行return语句之前执行finally块。即使您将return放在try块中,在try块中执行return语句之前,java仍将执行finally块。即使将return放在try块中,java仍将在try块中执行return语句之前执行finally块。即使将return放在try块中,java仍将在执行try块中的return语句之前执行finally块。您的
finally
块不应返回resultset
您可以写入finally
阻止在所有其他错误处理发生后无条件执行的语句,并清除一些资源
如果一切正常,它将返回来自的结果集try
块。
最后将执行
如果某个异常出现错误,finally
会运行,但不会返回resultset
,因为如果未生成该异常,则返回一些null
值是没有意义的。您的finally
块不应返回resultset
您可以写入finally
阻止在所有其他错误处理发生后无条件执行的语句,并清除一些资源
如果一切正常,它将返回来自的结果集try
块。
最后将执行
如果某个异常出现错误,finally
会运行,但不会返回resultset
,因为如果未生成该异常,则返回一些null
值是没有意义的。您的finally
块不应返回resultset
您可以写入finally
阻止在所有其他错误处理发生后无条件执行的语句,并清除一些资源
如果一切正常,它将返回来自的结果集try
块。
最后将执行
如果某个异常出现错误,finally
会运行,但不会返回resultset
,因为如果未生成该异常,则返回一些null
值是没有意义的。您的finally
块不应返回resultset
您可以写入finally
阻止在所有其他错误处理发生后无条件执行的语句,并清除一些资源
如果一切正常,它将返回来自的结果集try
块。
最后将执行
如果出现错误,则会运行一些异常,但不会返回结果集,因为如果未生成,返回一些null
值是没有意义的。在try finally
中,即使try
返回了值,仍会调用finally
在您的代码中,希望调用finally
块中的所有代码,因此没有返回是有意义的。在try finally
中,即使try
返回了也会调用finally
在您的代码中,希望调用finally
块中的所有代码,因此没有返回是有意义的。在try finally
中,即使try
返回了也会调用finally
在您的代码中,希望调用finally
块中的所有代码,因此没有返回是有意义的。在try finally
中,即使try
返回了也会调用finally
在代码中,最好调用finally
块中的所有代码
629 public <T> T query(
630 PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor<T> rse)
631 throws DataAccessException {
632
633 Assert.notNull(rse, "ResultSetExtractor must not be null");
634 logger.debug("Executing prepared SQL query");
635
636 return execute(psc, new PreparedStatementCallback<T>() {
637 public T doInPreparedStatement(PreparedStatement ps) throws SQLException {
638 ResultSet rs = null;
639 try {
640 if (pss != null) {
641 pss.setValues(ps);
642 }
643 rs = ps.executeQuery();
644 ResultSet rsToUse = rs;
645 if (nativeJdbcExtractor != null) {
646 rsToUse = nativeJdbcExtractor.getNativeResultSet(rs);
647 }
648 return rse.extractData(rsToUse);
649 }
650 finally {
651 JdbcUtils.closeResultSet(rs);
652 if (pss instanceof ParameterDisposer) {
653 ((ParameterDisposer) pss).cleanupParameters();
654 }
655 }
656 }
657 });
658 }
private static String getString() {
try{
return "a";
} finally {
return "b";
}
}
try
{
System.out.println("Inside try/catch");
return 1;
}
finally
{
System.out.println("Inside finally");
}
Inside try/catch
Inside finally
try
{
if (true)
{
throw new RuntimeException();
}
System.out.println("Inside try/catch");
return 1;
}
finally
{
System.out.println("Inside finally");
}
try
{
if (true)
{
throw new RuntimeException();
}
System.out.println("Inside try/catch");
}
finally
{
System.out.println("Inside finally");
return 2;
}
int releasePermitAndGet() {
try{
mLock.lock();
mPermits++;//release the permit
permitNotZero.signalAll();// signal the other thread that the conditon has been changed.
return mPermites;
}
finally{
mLock.unlock();
}
}