黑马程序员技术交流社区
标题:
finally不能改变try中的返回值。test6
[打印本页]
作者:
刘建华
时间:
2015-1-12 11:19
标题:
finally不能改变try中的返回值。test6
package com.itheima;
/**
6、 用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行finally?
@author 刘建华
*/
/*
*在try中写了return,后面又写了finally,是先执行return还是先执行finally?
*思路:1.定义一个返回值为int的函数。在try代码块中和fianlly代码块中分别对num进行赋值;
*然后再try代码块中return中返回这个num。然后再主函数中打印出num的值。然后在finally中
*加入return返回num,再打印出num的值。查看num的值,进行判断。
*步骤:1.建立两个类。
*1.分别在其中建立一个返回值为int类型的函数。
*2.分别在其中建立try代码块和finally代码块,分别在其中给num不同的值。
*4.在第一个类中的try代码块中加入return语句返回num的值。
*5.在第二个类中的try代码块和finally代码块中都加入return语句返回num的值
*3.在主函数中调用这个函数。打印出num的值。
*/
class Test_1
{
//建立一个返回值为int的函数。
public static int Num()
{
int num;
//运行try代码块时,给num赋值。
try
{
//用来检测try块里面处于return前的语句是否有被执行
System.out.println("此时try语句块正在被执行");
num=8;
return num;
}
//运行finally代码块时,给num赋值。
finally
{
//用来检测finally语句块中的语句有没有被执行
System.out.println("此时finally语句块正在被执行");
num=11;
}
}
}
class Test_2
{
//建立一个返回值为int的函数。
public static int Num()
{
int num;
//运行try代码块时,给num赋值。
try
{
//用来检测try块里面处于return前的语句是否有被执行
System.out.println("此时try语句块正在被执行");
num=8;
return num;
}
//运行finally代码块时,给num赋值。
finally
{
//用来检测finally语句块中的语句有没有被执行
System.out.println("此时finally语句块正在被执行");
num=11;
return 7;
}
}
}
public class Test6
{
//打印出num的值
public static void main(String[] args)
{
System.out.println(Test_1.Num());
System.out.println(Test_2.Num());
}
}
/*判断:1。如果两次打印出了的值为finally代码块中给num赋的值,证明了先执行finally,后执行return。
2。如果两次打印出的值为try代码块中给num赋的值,证明行执行return,后执行finally
3.如果第一次打印值为try代码块给num赋的值,第二次为finally代码块给num赋的值。则证明是先执行finally,后执行
return,而且finally代码块不能改变try中的返回值。
结果证明:第一次打印值为try代码块给num赋的值,第二次为finally代码块给num赋的值。所以是先执行finally,后执行return。
其顺序是:先执行try,在执行finally,最后执行try中的return*/
作者:
pcy1022
时间:
2015-1-12 11:23
很好,我又长知识了。
作者:
王景阳
时间:
2015-1-12 11:50
看着 有点晕
作者:
outsider1020
时间:
2015-1-12 12:16
附加一句,如果finally中有return语句的话,是不会再执行try块中return语句的
作者:
飞流至寒
时间:
2015-1-12 15:32
我觉得得出这个结论不太准确。应该是先处理了try中return的结果,但不立刻返回,而是将结果缓存,然后执行finally。若finally中有return, 则直接返回finally中return的结果,若finally中没有return, 则将try中return的结果返回给调用函数。
这段代码可以证明try中的return是先于finally处理的。
public class TestRF {
// 定义一个静态变量x作为判断条件
static int x = 1;
public static void main(String[] args) {
// 调用测试函数
test();
// 输出x的值作为测试结果
System.out.println("x=" + x);
// 若先处理return,则x的值为(1+2)*3=9
// 若先处理finally,则x的值为1*3+2=5
// 输出结果为9
}
public static int test() {
try {
// 使x的值加2
return x = x + 2;
} finally {
// 使x的值乘3
x = x * 3;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2