Java异常处理(二)

原创 2015年11月19日 19:41:05

 Java异常处理(二)

  Java基本的异常处理机制已经在上一篇的文章中写出,这篇文章主要分析在try{ ... }catch{ ... }代码块中加return语句 

后,对finally代码块的影响及对其调用者的影响。

  下面看这段代码:

public class TestException {  
    public TestException() {  
    }  
  
    boolean testEx() throws Exception {  
        boolean ret = true;  
        try {  
            ret = testEx1();  
        } catch (Exception e) {  
            System.out.println("testEx, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx, finally; return value=" + ret);  
            return ret;  
        }  
    }  
  
    boolean testEx1() throws Exception {  
        boolean ret = true;  
        try {  
            ret = testEx2();  
            if (!ret) {  
                return false;  
            }  
            System.out.println("testEx1, at the end of try");  
            return ret;  
        } catch (Exception e) {  
            System.out.println("testEx1, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx1, finally; return value=" + ret);  
            return ret;  
        }  
    }  
  
    boolean testEx2() throws Exception {  
        boolean ret = true;  
        try {  
            int b = 12;  
            int c;  
            for (int i = 2; i >= -2; i--) {  
                c = b / i;  
                System.out.println("i=" + i);  
            }  
            return true;  
        } catch (Exception e) {  
            System.out.println("testEx2, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx2, finally; return value=" + ret);  
            return ret;  //会屏蔽Exception
        }  
    }  
  
    public static void main(String[] args) {  
        TestException testException1 = new TestException();  
        try {  
            testException1.testEx();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  

其运行结果如下:(和你想象的是否一致呢?)

i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, finally; return value=false
testEx, finally; return value=false


  可以用Eclipse进行Step Into进行逐步调试,会有意想不到的效果。

在看看下面这段代码:

public class TestException {  
    public TestException() {  
    }  
  
    boolean testEx() throws Exception {  
        boolean ret = true;  
        try {  
            ret = testEx1();  
        } catch (Exception e) {  
            System.out.println("testEx, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx, finally; return value=" + ret);  
            return ret;  
        }  
    }  
  
    boolean testEx1() throws Exception {  
        boolean ret = true;  
        try {  
            ret = testEx2();  
            if (!ret) {  
                return false;  
            }  
            System.out.println("testEx1, at the end of try");  
            return ret;  
        } catch (Exception e) {  
            System.out.println("testEx1, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx1, finally; return value=" + ret);  
            return ret;  
        }  
    }  
  
    boolean testEx2() throws Exception {  
        boolean ret = true;  
        try {  
            int b = 12;  
            int c;  
            for (int i = 2; i >= -2; i--) {  
                c = b / i;  
                System.out.println("i=" + i);  
            }  
            return true;  
        } catch (Exception e) {  
            System.out.println("testEx2, catch exception");  
            ret = false;  
            throw e;  
        } finally {  
            System.out.println("testEx2, finally; return value=" + ret);  
           // return ret;  //会屏蔽Exception
        }  
    }  
  
    public static void main(String[] args) {  
        TestException testException1 = new TestException();  
        try {  
            testException1.testEx();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}  


 

得到的运行结果如下:

i=2
i=1
testEx2, catch exception
testEx2, finally; return value=false
testEx1, catch exception
testEx1, finally; return value=false
testEx, finally; return value=false

  对比以上两段代码,不难发现,两个的主要区别只是一行语句的差别在于testEx2方法下最后一句:return ret;

通过调试不难得出这样的结论:即使在方法内捕捉到异常,如果在finally代码段中加入了返回值,那么异常将会被返回值屏蔽。

相关文章推荐

java基础关于异常处理方式

  • 2016年08月20日 09:42
  • 13.49MB
  • 下载

java异常处理

  • 2014年12月13日 20:18
  • 124KB
  • 下载

黑马程序员:毕向东java视频之面向对象篇二(内部类和异常处理)

一、内部类 内部类的访问规则: 1、内部类可以直接访问外部类中的成员,包括私有,之所以可以直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式    外部类名.this 2、外部类要访问...

java,访问异常处理方法

  • 2014年12月16日 16:43
  • 963B
  • 下载

java异常处理

  • 2013年08月09日 11:44
  • 2KB
  • 下载

java 异常处理(二)

Java你需知的try-catch-finally
  • ShuTear
  • ShuTear
  • 2012年08月15日 22:49
  • 1457

java异常处理

  • 2013年12月30日 22:16
  • 79KB
  • 下载

C++ Java异常处理比较

  • 2014年06月21日 21:12
  • 21KB
  • 下载

Java SE 基础概述(二)异常处理

设计一个严谨的程序是一项繁琐的工作。各种各样的情况都应当被充分考虑。如果不采用异常处理方法,而按照一般的程序设计方法,则基本上只能逐个分析在程序中可能出现的各种异常情况,并在程序的相应位置立即作出适当...

6.尚硅谷_java基础_异常处理

  • 2013年08月29日 12:01
  • 788KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java异常处理(二)
举报原因:
原因补充:

(最多只允许输入30个字)