本帖最后由 崔湖尧 于 2014-6-21 12:58 编辑
在try中写了return,后面又写了finally,是先执行return还是先执行 * fianlly?
代码测试如下:
- class TestDemo {
- public static void main(String[] args) {
- orderTest();
- }
- public static int orderTest() {
- try {
- return systemOutput("Return");
- } finally {
- systemOutput("Finally");
- }
- }
- private static int systemOutput(Object obj) {
- System.out.println(obj);
- return 0;
- }
- }
复制代码 运行结果为:
Retrun
Finally
很显然,return语句先执行。
我们已经知道return语句先执行,那么fianlly中的语句是否会改变return语句中的变量的值呢?
代码如下:
- class TestDemo {
- public static void main(String[] args) {
- System.out.println(isFinallyStatementsExecuteFirst());
- }
- private static boolean isFinallyStatementsExecuteFirst() {
- boolean finallyStatementsExecute = false;
- try {
- return finallyStatementsExecute;
- }finally {
- finallyStatementsExecute = true;
- }
- }
- }
复制代码 运行结果为false,就是fianlly中的主句不能改变return中变量的值。
问题又来了,如果在finally语句中也加入return语句,结果会怎样呢?
在finally语句中加入:return ture语句。
结果为true。也就是说,finally中的return语句覆盖了try中的return。
我想知道这些操作在内存中是怎样进行的?栈中,堆中?
|