java异常

来源:互联网 发布:中国何时能拆掉网络墙 编辑:程序博客网 时间:2024/05/22 21:57

异常概念

异常种类分为以下两种:
Checked Exception: 检查性异常,需要强制try catch的

Uchecked Exception :运行时异常,也就是RuntimeException
RuntimeException extends Exception,Exception 是所有异常的父类。
Spring事务管理只对出现运行期异常进行回滚,检查性异常不会进行回滚处理
运行时异常会导致程序中断,如果不进行处理的话。

常见的种类有以下这些

NullPointerException,IndexOutOfBoundsException,NumberFormatException,ClassCastException ,ArrayStoreException

这些异常不需要在代码里面强制捕获,也就是我们平常见的try…catch…或throws 机制去处理的异常

/**     * @Description: 运行时异常,常见种类有以下几种     * @see: NullPointerException,     * @see: IndexOutOfBoundsException     * @see:NumberFormatException     * @see:ClassCastException 类型转换错误     * @see:ArrayStoreException 类型转换错误     * @return:void     */    private void unCheckedException() {        // List list = null;list.get(0);//NullPointerException        // new ArrayList().get(1);//IndexOutOfBoundsException        // Integer.parseInt("dd");//NumberFormatException        // List aa=(List)new ExceptionType();//ClassCastException        /**         * Object[] in = { 1, 2 }; in = new Integer[5]; in[1] = "123";//ArrayStoreException         **/    }

try catch一些理解

try{}里面包裹的代码,如果某一行遇到了错误,那么就直接跳到了catch里面,而 try{}里面剩余的代码不会执行的。如果是非检查性异常,遇到错误例如test4()方法,也是执行到遇到错误哪一行代码,然后由调用它的方法test3()进行捕获。

@Test    public void test1() throws Exception {        try {            new FileInputStream("aaa");        } catch (Exception e) {            log.error("catch错误" + e.getLocalizedMessage());        }        log.info(" test()1执行------");    }    @Test    public void test2() throws Exception {        try {            new FileInputStream("aaa");            log.info(" test2()执行------");        } catch (Exception e) {            log.error("test2():" + e.getLocalizedMessage());        }    }    @Test    public void test3() {        try {            test4();        } catch (Exception e) {            log.info("test3():" + e.getLocalizedMessage());        }    }    public void test4() throws Exception {        new FileInputStream("aaa");        log.info("test4直接抛出");    }
2015-07-23 17:51:14,621 ERROR [main] (ExceptionThrowTypeTwo.java:37) - catch错误aaa (系统找不到指定的文件。)2015-07-23 17:51:14,689  INFO [main] (ExceptionThrowTypeTwo.java:39) -  test()1执行------2015-07-23 17:51:14,692 ERROR [main] (ExceptionThrowTypeTwo.java:48) - test2():aaa (系统找不到指定的文件。)2015-07-23 17:51:14,693  INFO [main] (ExceptionThrowTypeTwo.java:57) - test3():aaa (系统找不到指定的文件。)

多个方法嵌套异常处理

我们可能有这种场景,有一个主方法functionA() 调用functionB(), 然后functionB()调用functionC()。
b和c里面都可能出现异常情况,这个时候 我们是每个方法里面都try catch 还是都直接抛出去,还是什么都不处理。

checked异常导致了太多的try…catch 代码

如果一个异常是致命的,不可恢复的。或者调用者去捕获它没有任何益处,使用unChecked异常。如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常。在使用unChecked异常时,必须在在方法声明中详细的说明该方法可能会抛出的unChekced异常。由调用者自己去决定是否捕获unChecked异常当所有调用者必须处理这个异常,可以让调用者进行重试操作;或者该异常相当于该方法的第二个返回值。使用**checked**异常。这个异常仅是少数比较高级的调用者才能处理,一般的调用者不能正确的处理。使用**unchecked**异常。有能力处理的调用者可以进行高级处理,一般调用者干脆就不处理。这个异常是一个非常严重的错误,如数据库连接错误,文件无法打开等。或者这些异常是与外部环境相关的。不是重试可以解决的。使用**unchecked**异常。因为这种异常一旦出现,调用者根本无法处理。如果不能确定时,使用unchecked异常。并详细描述可能会抛出的异常,以让调用者决定是否进行处理**异常应该在最初产生的位置记录!**
0 0
原创粉丝点击