try catch finally中的return 问题
来源:互联网 发布:windows无法输入密码 编辑:程序博客网 时间:2024/06/12 01:07
代码:
public class TestTryCatch {
public static void main(String args[]){
System.out.println(kkk());
}
public static int kkk(){
int k = 0;
try {
k += 2;
return k;
} catch(Exception e){
k++;
return k;
} finally {
k += 5;
}
}
}
输出结果为:2
public class TestTryCatch {
public static void main(String[] args) {
System.out.println(kkk());
}
public static StringBuffer kkk() {
StringBuffer k = new StringBuffer();
try {
k.append(2);
return k;
} catch (Exception e) {
k.append(3);
return k;
} finally {
k.append(5);
}
}
}
输出结果为:25
总结:
在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是finally中的代码是必须要执行的。
方法在return的时候并不是把它所拥有的那个值给返回了,而是复制一份返回!因此,对于基本类型的数据,在finally中改变return的值对返回值没有任何影响,而对于引用类型的数据,就有影响。
1.finally块不管在什么时候都是需要执行的,即使你在try块中return了
2.return其实就是给函数中的一个隐藏变量赋值(学过vb的同学应该都知道,vb中函数的返回值就是给函数名赋值),
所以你在try块中return的值会被finally中return的值覆盖掉。
3.引用类型和值类型的区别,引用类型指向的是同一个对象,一个改变大家都改变。值类型是每个人都有一份大家互不干扰。
StringBuilder是引用类型,所以在finally中改变的值会影响返回值,int是值类型所以再次改变i的值也不会影响到函数的隐藏变量的值!
finally的作用就是执行一些必要的代码,比如在程序抛出异常终止后,他还是会执行,所以一般用它来关闭数据库连接等一些必要也很重要的操作.
- try catch finally中的return 问题
- java try catch finally中的return问题
- 关于try catch finally 中的return问题
- try...catch...finally中的return
- try...catch...finally中的return
- return在try-catch-finally中的执行
- Java中try-catch-finally中的return
- 关于try-catch-finally中的return
- try...catch...finally中的return执行顺序
- try catch finally return?
- try catch finally return
- try catch finally return
- try-catch-finally-return返回值问题
- try catch finally 与 return 的问题
- try-catch-finally-return问题详解
- try catch finally return执行顺序问题
- try-catch-finally-return问题详解
- try finally中的return问题
- 在ns-3中查看当前有哪些程序可以执行
- 安卓资料共享
- 爬栏杆 深圳4人被撞飞
- 常见方法
- ora-01578
- try catch finally中的return 问题
- Less Comments, More Readable Code
- GC是什么?有几种算法实现?
- VC++中GlobalAlloc()、malloc()和new()函数之间区别
- kvm环境快照(snapshot)的使用方法
- Android emulator: ERROR: the user data image is used by another emulator. aborting 问题
- 使用IStream和GDI+在内存中实现图像格式转换
- 央视聚焦都市裸婚族:年轻人为房子丧失青春
- 利用Boost实现高度可移植的多线程C++程序