java异常

异常概念

异常种类分为以下两种:
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值