zoukankan      html  css  js  c++  java
  • java 異常抛出 throw 與 return

    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

  • 相关阅读:
    ASP.NET 上传文件最大值调整
    Git撤销提交
    MVC模式下如何实现RegisterStartupScript等功能
    RESTful接口设计原则/最佳实践(学习笔记)
    如何编译MongoDB?
    【NTKO】一些常用操作
    【solr】使用-取反时注意,-是表示排除,不能单独做条件用
    【layui】日期范围分开两个input,开始日期选中时,结束日期的最小可选择就是开始日期
    【转】【Java】剪切板操作大全
    【转】彻底禁用Chrome的“请停用以开发者模式运行的扩展程序”提示
  • 原文地址:https://www.cnblogs.com/LiuPan2016/p/6507590.html
Copyright © 2011-2022 走看看