第六十条 优先使用标准的异常

通俗来说,高手和菜鸟一个比较明显的区别,就是关于代码的复用,高手可以高度的重用,异常也不例外。java平台提供了一系列基本的未受检的异常,满足了绝大多数API的异常抛出需求。重用现有异常有很多好处,因为Java提供的异常是公共的,大家都在使用,其他人也熟悉,所以使你的api更容易学习和使用;异常的api大家都熟悉,所以代码的可读性会跟好,大家都熟悉这些异常;异常类越少,内存开销也越小,开销也越小。

最经常被重用的异常是IllegalArgumentException,非法状态。如果某个对象,还没有被正确的初始化,或者正在初始化的时候,调用对象的功能,通常就抛出这个异常。初始化包括但不限于 new 一个对象,或者对象要赋值才能使用等等。比如做android的都知道,比如ImageLoader Picasso Okhttp 等,都需要初始化一些配置,如果没调用init初始化添加参数配置,那就抛出异了。可以说,所有的错误都可以总结为非法参数或者非法状态,但,我们可以更加细化这些异常。在某些特定情况下的非法参数和非法状态:如果调用者在某个不允许null值的参数中传递了null,此时,抛出 NullPointerException,而不是IllEgalArgumentException; 同理, 如果在表示序列下表的参数,越界了,就抛出IndexOutOfBoundsException,而不是
IllegalArgumentException。另外一个通用的异常是ConcurrentModificationException,例如,多线程操作ArrayList的add()或remove()方法,就会抛出它,这个异常是对象被设计为单线程操作或者外部多线程同步机制配合使用,却多线程同时操作的情况抛出的。最后一个值得重视的异常是UnsupportedOperationException,如果对象不支持这个操作,就抛出这个异常,比如基类里一个方法,如果子类必须实现它才能用,通常做法是抽象,另一种思路就是在基类的这个方法抛出这个异常,强制子类去重写这个方法;或者另外一个场景,我们自定义了只支持add()方法的List列表,如果有人试图调用remove()方法,我们就抛出这个异常。

还有一些其他类型的异常,例如
IOException  输入流和输出流时可能出现的异常,这个范围比较广,属于总的范畴
EOFException   文件已结束异常,还强制使用
FileNotFoundException   文件未找到异常,没找到这个文件的路径
ClassCastException    类型转换异常类
SQLException   数据库操作异常
NumberFormatException    字符串转换为数字抛出的异常
StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常

NoSuchFieldException    字段未找到的异常
NoSuchMethodException   方法未找到的异常
InstantiationException  当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,例如无空构造方法时抛出该异常


在条件许可的情况下,其他的异常也可以被重用,前提是,一定要保证抛出的条件与文档中的描述保持一致。我们使用哪个异常并不是互斥的,也不一定总是很精准的,这个可以根据实际情况而定,没有严格的规范要求。

猜你喜欢

转载自blog.csdn.net/Deaht_Huimie/article/details/83994051