java-放置在何处;return";试一试,接住,最后阻挡?

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

我跟踪了Spring框架的源代码,发现了一些对我不友好的代码。 我想我必须把“return”语句放在finally块中,但这段代码把它放在try块中

这是源代码。(这是org.springframework.jdbc.core.JdbcTemplate的一部分)

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();
    }
}