• 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

  • 相关阅读:
    【Windows】Windows服务管家婆之Service Control Manager
    【Python】python文件名和文件路径操作
    【Python】python 调用c语言函数
    IIS 之 HTTP Error 404.2 – Not Found(ISAPI 和 CGI 限制)
    IIS 之 HTTP错误 404.17
    IIS 之 HTTP 错误 404.3
    IIS 之 HTTP 错误 403.14
    IIS 之 打开/关闭 Internet 信息服务
    Wcf 之 配置文件解析
    Web Service 之 开发、部署
  • 原文地址:https://www.cnblogs.com/LiuPan2016/p/6507590.html
Copyright © 2020-2023  润新知