How does return work in try, catch, finally in Java?(在 Java 中,try、catch 和 finally 中的 return 是如何工作的?)
问题描述
我无法准确理解 return
在 try
、catch
中的工作原理.
I can't understand exactly how return
works in try
, catch
.
- 如果我有
try
和finally
而没有catch
,我可以将return
放入try
块. - 如果我有
try
、catch
、finally
,我不能把return
放在尝试
块. - 如果我有一个
catch
块,我必须将return
放在try
、catch
之外,finally
块. - 如果我删除
catch
块和throw Exception
,我可以将return
放在try
块内.
- If I have
try
andfinally
withoutcatch
, I can putreturn
inside thetry
block. - If I have
try
,catch
,finally
, I can't putreturn
in thetry
block. - If I have a
catch
block, I must put thereturn
outside of thetry
,catch
,finally
blocks. - If I delete the
catch
block andthrow Exception
, I can put thereturn
inside thetry
block.
它们究竟是如何工作的?为什么我不能将 return
放在 try
块中?
How do they work exactly? Why I can't put the return
in the try
block?
带有try
、catch
、finally
public int insertUser(UserBean user) {
int status = 0;
Connection myConn = null;
PreparedStatement myStmt = null;
try {
// Get database connection
myConn = dataSource.getConnection();
// Create SQL query for insert
String sql = "INSERT INTO user "
+ "(user_name, name, password) "
+ "VALUES (?, ?, ?)";
myStmt = myConn.prepareStatement(sql);
// Set the parameter values for the student
myStmt.setString(1, user.getUsername());
myStmt.setString(2, user.getName());
myStmt.setString(3, user.getPassword());
// Execute SQL insert
myStmt.execute();
} catch (Exception exc) {
System.out.println(exc);
} finally {
// Clean up JDBC objects
close(myConn, myStmt, null);
}
return status;
}
带有 try
的代码,finally
没有 catch
Code with try
, finally
without catch
public int insertUser(UserBean user) throws Exception {
int status = 0;
Connection myConn = null;
PreparedStatement myStmt = null;
try {
// Get database connection
myConn = dataSource.getConnection();
// Create SQL query for insert
String sql = "INSERT INTO user "
+ "(user_name, name, password) "
+ "VALUES (?, ?, ?)";
myStmt = myConn.prepareStatement(sql);
// Set the parameter values for the student
myStmt.setString(1, user.getUsername());
myStmt.setString(2, user.getName());
myStmt.setString(3, user.getPassword());
// Execute SQL insert
myStmt.execute();
return status;
} finally {
// Clean up JDBC objects
close(myConn, myStmt, null);
}
}
推荐答案
是的,很混乱.
在Java中,非void
函数的所有程序控制路径必须以return
结束,或抛出异常.这条规则说得很好,很简单.
In Java, all program control paths of a non-void
function must finish with a return
, or throw an exception. That's the rule put nice and simply.
但是,令人憎恶的是,Java 允许您将 extra return
放在 finally
块中,这会覆盖之前遇到的任何 返回
:
But, in an abomination, Java allows you to put an extra return
in a finally
block, which overrides any previously encountered return
:
try {
return foo; // This is evaluated...
} finally {
return bar; // ...and so is this one, and the previous `return` is discarded
}
这篇关于在 Java 中,try、catch 和 finally 中的 return 是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 Java 中,try、catch 和 finally 中的 return 是如何工作的?


- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01