java异常处理:finally中不要return
2012-02-15 21:31
274 查看
public class Ex1 {
public static void main(String[] args) {
System.out.println(Ex1.getResult());
}
public static int getResult(){
int a =100;
try{
return a+10; //注意,java的基础数据类型是值传递,这里的返回值已经和上面的a没有关系了
}catch(Exception e){
e.printStackTrace();
}finally{
return a; //最后再把值重定向到a(相当于将try中的返回值覆盖掉),所以输出还是100
}
}
}
再看一个例子:
public class Ex1 {
public static void main(String[] args) {
try{
System.out.println(Ex1.getResult());
}catch(Exception e){
e.printStackTrace();
System.out.println("截获异常catch");
}finally{
System.out.println("异常处理finally");
}
}
public static int getResult() throws Exception{
int a =100;
try{
a=a+10;
throw new RuntimeException();
}catch(Exception e){
System.out.println("截获异常并重新抛出异常");
throw new Exception();
}finally{
return a;
}
}
}
输出如下:
截获异常并重新抛出异常
110
异常处理finally
关键的“截获异常catch”却没有执行!!!
原因是在getResult()的finally中return一个值,等同于告诉编译器该方法没有异常,但实际上异常是有的,这样的结果是该方法的调用者却捕获不到异常,相对于异常被无端的被吃掉了,隐藏杀机啊!!
结论:不要再finally中试图return一个值,这样可能会导致一些意想不到的逻辑错误,finally就是用来释放资源的!!
public static void main(String[] args) {
System.out.println(Ex1.getResult());
}
public static int getResult(){
int a =100;
try{
return a+10; //注意,java的基础数据类型是值传递,这里的返回值已经和上面的a没有关系了
}catch(Exception e){
e.printStackTrace();
}finally{
return a; //最后再把值重定向到a(相当于将try中的返回值覆盖掉),所以输出还是100
}
}
}
再看一个例子:
public class Ex1 {
public static void main(String[] args) {
try{
System.out.println(Ex1.getResult());
}catch(Exception e){
e.printStackTrace();
System.out.println("截获异常catch");
}finally{
System.out.println("异常处理finally");
}
}
public static int getResult() throws Exception{
int a =100;
try{
a=a+10;
throw new RuntimeException();
}catch(Exception e){
System.out.println("截获异常并重新抛出异常");
throw new Exception();
}finally{
return a;
}
}
}
输出如下:
截获异常并重新抛出异常
110
异常处理finally
关键的“截获异常catch”却没有执行!!!
原因是在getResult()的finally中return一个值,等同于告诉编译器该方法没有异常,但实际上异常是有的,这样的结果是该方法的调用者却捕获不到异常,相对于异常被无端的被吃掉了,隐藏杀机啊!!
结论:不要再finally中试图return一个值,这样可能会导致一些意想不到的逻辑错误,finally就是用来释放资源的!!
相关文章推荐
- JAVA异常处理之finally中最好不要使用return
- java异常处理:finally中不要return
- JAVA异常处理之finally中最好不要使用return
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- Java异常处理中finally中的return会覆盖catch语句中的return语句
- Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
- java中异常处理finally和return语句的执行顺序
- java中异常处理finally和return语句的执行顺序
- Java异常处理机制以及try-catch-finally-return执行顺序
- java中异常处理finally和return语句的执行顺序
- Java异常处理机制以及try-catch-finally-return执行顺序
- Java异常处理机制以及try-catch-finally-return执行顺序
- Java 异常处理:finally,return
- Java异常处理---finally和return的执行顺序
- Java异常处理中同时有finally和return语句的执行问题
- Java中异常处理-finally和return执行顺序
- java异常处理-finally中使用return和throw语句
- java异常处理之使用finally