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异常处理(二)

java异常处理(二)
  • ssqfzc
  • ssqfzc
  • 2014年04月14日 22:36
  • 476

java--异常处理的实例

/* 时间: 2012-10-10 作者: 烟大 程序要求: 熟悉异常处理机制; try { 可能出现异常的代码; } catch { 对异常进行处理...
  • wangyang1354
  • wangyang1354
  • 2012年10月11日 23:11
  • 5546

JAVA异常处理二--finally

出现在java程序中的finally块一定会被执行吗? 上学的时候,哲学老师对我们说,做什么都不要太绝对了,做题也是一样。。。。。拿去考试去了。。 言归正传,答案是不一定的。 为甚呢,    1.第一...
  • SCT_T
  • SCT_T
  • 2016年10月25日 20:58
  • 114

java异常处理二——try-catch-finally执行顺序

之前一直以为程序执行完try-catch-fianlly之后就退出了,而try-catch-finally之后语句块后面的代码就不会执行。重新梳理一下java异常执行的顺序。 try-catch-fi...
  • beatrice_g20
  • beatrice_g20
  • 2016年06月16日 16:48
  • 775

Java 异常处理机制(异常链)

JVM (Java 虚拟机 的缩写)用方法调用栈来跟踪一系列的方法调用过程。该堆栈保存了每个调用方法的本地信息。当一个新的方法被调用时,JVM把描述该方法的栈结构置入栈顶,位于栈顶的方法为正在执行的方...
  • qq_18505715
  • qq_18505715
  • 2017年06月10日 17:31
  • 277

JAVA 异常处理练习

//仅作为学习笔记 /* 异常练习1 */ class NoValueException extends Exception { NoValueException(String...
  • wu_lai_314
  • wu_lai_314
  • 2013年03月08日 00:20
  • 863

Java异常处理方式

前言     平时在开发的时候避免不了的出一些大大小小的不同类型的错误,这时候,对于这些异常怎么处理呢,显得至关重要了。 内容 分类 Trowable:有两个重要的子类,Exception(异...
  • zlt995768025
  • zlt995768025
  • 2016年07月13日 11:30
  • 378

高效Java异常处理机制

高效Java异常处理机制           Java开发人员做出的有关架构的最重要的决定之一便是如何使用Java异常模型。Java异常处理成为社区中讨论最多的话题之一。一些人认为J...
  • jokewangloveyou
  • jokewangloveyou
  • 2014年07月09日 19:41
  • 686

Java异常处理小结

[引用请注明出处:http://blog.csdn.net/bhq2010/article/details/9109809] 最近一个月都在做demo,对Java的异常处理有了一点感受,小结在这里,其...
  • bhq2010
  • bhq2010
  • 2013年06月17日 11:49
  • 2562

java进行异常处理时的注意事项

java进行异常处理时的注意事项 (1)try、catch和finally这三个关键字不能单独使用,否则编译出错。 (2)try语句块后既可以只使用catch语句块,也可以只使用final...
  • qq_33406883
  • qq_33406883
  • 2017年01月03日 22:02
  • 411
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java异常处理(二)
举报原因:
原因补充:

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