package 異常;  
 
public class TestException {  
    public TestException() {  
    }  
 
    boolean testEx() throws Exception {  
        boolean ret = true;  
        try {  
            ret = testEx1();  
        } catch (Exception e) {  
            e.printStackTrace();
            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) {  
            e.printStackTrace();
            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) {
            e.printStackTrace();
            System.out.println("testEx2, catch exception");  
            ret = false;  
           //極其重要 throw 可以代替 return 若後面 finally 中是 return 調用此方法的將不會收到異常
           //(即catch裏面作爲結果抛出的異常被finally裏面的return覆蓋了)   若沒有return也沒有抛出某異常  則調用的將會接到此處抛出的異常並處理
            throw e;    
        } finally {  
            System.out.println("testEx2, finally; return value=" + ret);  
//            return ret;  
            throw new ArrayIndexOutOfBoundsException();
        }
//        System.out.println("執行中");
//        return false;
    }  
 
    public static void main(String[] args) {  
        TestException testException1 = new TestException();  
        try {  
            testException1.testEx();  
        } catch (Exception e) {  
            e.printStackTrace();  
            System.out.println("main");
        }  
    }  
}

結果

i=2
i=1
java.lang.ArithmeticException: / by zero
    at 異常.TestException.testEx2(TestException.java:48)
    at 異常.TestException.testEx1(TestException.java:25)
    at 異常.TestException.testEx(TestException.java:10)
    at 異常.TestException.main(TestException.java:71)
testEx2, catch exception
testEx2, finally; return value=false
java.lang.ArrayIndexOutOfBoundsException
    at 異常.TestException.testEx2(TestException.java:62)
    at 異常.TestException.testEx1(TestException.java:25)
    at 異常.TestException.testEx(TestException.java:10)
    at 異常.TestException.main(TestException.java:71)
testEx1, catch exception
testEx1, finally; return value=false
testEx, finally; return value=false

如果所有方法都层层上抛获取的异常,最终JVM会进行处理,处理也很简单,就是打印异常消息和堆栈信息

質料   http://www.cnblogs.com/to-creat/p/5688235.html

java 異常抛出 throw 與 return的更多相关文章

  1. java中异常的抛出:throw throws

    java中异常的抛出:throw throws Java中的异常抛出 语法: public class ExceptionTest{ public void 方法名(参数列表) throws 异常列表 ...

  2. java中抛出throw关键字是怎么用的? 举例?

    5.抛出throw关键字 马克-to-win:我们先说5/0的原理,当程序运行到5/0的时候,java系统JVM会在后台new出一个除0异常实例,之后把这个实例传入catch块儿供开发者使用.马克-t ...

  3. java的异常抛出throws和throw的简单使用

    前提: 当在程序测试时,如果你需要定义一个自己的异常,而非现在已经存在的异常,这个时候你需要用到throws和throw,try-catch只是一个简单的捕获异常的过程. 代码如下: package ...

  4. 【JAVASE】Java同一时候抛出多个异常

    Java有异常抛出后.跳出程序.一般无法运行接下来的代码. 大家做登陆功能.常常会实username和password的登陆校验,username或者password错误.假设通常是提示usernam ...

  5. 【优化】自定义抛出throw 对象练习

    package ltb6w; import java.util.*; public class Bank { private boolean bool=true; private String sel ...

  6. 自定义抛出throw 对象练习

    package ltb6w; import java.util.*; public class Bank { private String select; private String select2 ...

  7. java的异常抛出和String类常用方法

    一.异常抛出 异常是程序的异种非错误的意外情况,分为运行期异常(RuntimeException)和编译期异常(CheckedExcption) 处理异常可以用try——catch或自定义 impor ...

  8. java使用json抛出org.apache.commons.lang.exception.NestableRuntimeException解决方案

    出现这个问题,说明缺少jar包,将下面的jar引入即可 commons-beanutils-1.8.3 commons-lang-2.6 (注:导入最新的 3.1 版本会继续报如下错误) common ...

  9. java-异常-原理异常对象的抛出throw

    1 class Demo { 2 public static int method(int[] arr,int index) { 3 4 // System.out.println(arr[index ...

随机推荐

  1. javascript:width,innerwidth和outerwidth的区别

    width()方法用于获得元素宽度 innerWidth()方法用于获得包括内边界(padding)的元素宽 outerWidth()方法用于获得包括内边界(padding)和边框(border)的元 ...

  2. ACM__最小生成树之prime

    今天做了一道题,根本没想到最小生成树,稀里糊涂的浪费了很多时间,复习一下 转载自https://www.cnblogs.com/zhangming-blog/p/5414514.html Prim算法 ...

  3. NETIF_F_LLTX 的属性

    在bond初始化的时候,我们可以看到如下属性: /* don't acquire bond device's netif_tx_lock when transmitting */     bond_d ...

  4. centos7下找不到iptables文件

    最近在centos7下,搭建ftp服务,按照步骤一步一步来,发现 etc/sysconfig/iptables这个文件并不存在,然后去找解决方案, 原文地址:http://blog.csdn.net/ ...

  5. Redis进阶实践之九 独立封装的RedisClient客户端工具类(转载9)

    Redis进阶实践之九 独立封装的RedisClient客户端工具类 一.引言 今天开始有关Redis学习的第九篇文章了,以后肯定会大量系统使用Redis作为缓存介质,为了更好的更好的Redis,自己 ...

  6. WebStorm新创建项目介绍

    WebStorm创建一个项目 这里支持有很多的类型项目: Empty Project         ----一个空的项目 Html5 Boilerplate     ----HTML5开发框架 We ...

  7. ArcGIS案例学习笔记-批处理擦除挖空挖除相减

    ArcGIS案例学习笔记-批处理擦除挖空挖除相减 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:批处理擦除.挖空.挖除.相减 数据源:chp13/ex5/pa ...

  8. 手动安裝TMG2010所需Windows服务和功能

    安装 Forefront TMG 之前,必须运行准备工具,以验证是否已在您的计算机上安装成功安装 Forefront TMG 所需的应用程序.如果在未首先运行准备工具的情况下运行 Forefront ...

  9. HTTPConnectionPool(host:XX)Max retries exceeded with url

    爬虫多次访问同一个网站一段时间后会出现错误 HTTPConnectionPool(host:XX)Max retries exceeded with url '<requests.package ...

  10. git 分支合并develop 重新拉取

    1.本地包 zb-local 上传到对应的线上分支 zb-online cd 进入本地所在文件夹,然后执行下面三项 git add . git commit -m '修改' git push   或者 ...