近日开发百度sdk,用到自定义异常,只是按照原来的学的,只是继承自Exception,没有深思下去。看了一点百度官方的sdk源码,看到里面有方法内有抛出异常,但是方法却没有抛出异常,甚是纳闷。后来想了想,有checked exceptionunchecked exception之分。所谓checked exception就是必须手动try catch或者throws的,unchecked exception 可手动try catch或者throws,也可什么也不做,交给程序处理。 

        突然想到啥时候用checked exception,啥时候用unchecked exception,很迷惑,百度之加上自己理解,感悟如下:

checked exception 是在用户操作或者输入数据有误时必须捕捉而不至于程序崩溃退出而进行的必须的操作

unchecked exception 表明了程序本身有问题,而不是用户违规操作而导致的问题。

 

举例来说:

    假如做了个计算器程序,要求用户必须输入数字,而用户可能不按规矩来,输入了不合法的非数字符号,那么程序就应该进行处理,给用户提示或者干脆什么也不做,在这里如果用了unchecked exception的话,不进行捕捉的话,你的程序就可能挂了,因为他是由程序自行处理的。

    再比如获取url内容时候,连接超时你应该进行处理一下,或者提醒用户,或者自行再链接一遍,这就用到了checked exception。

    至于unchecked exception,可以参考java的ArrayIndexOutOfBoundsException,这个是因为程序员的处理不当而发生的,而不能归结于用户操作不当造成的,所以说是程序的错误,所以用unchecked exception比较合理。

    总结:

        是程序员造成的异常,则构造为unchecked exception;使用户使用不当造成的异常,构造为checked exception。主要原因是unchecked exception是不应该遗留下的,而应该在debug时解决。