序言:
在使用app时,我们常常会因为一个微小的bug妨碍到使用,进而对软件产生恶感,而选用竞品或是降低了自己在该app上的消费欲望。而作为代码撰写者的我们应当在日常代码中对exception进行bug处理,以提高用户的使用体验。
异常分类:
Exception 又有两个分支 , 一个是运行时异常 RuntimeException , 一 个是检查异常 CheckedException。
RuntimeException 如 :NullPointerException 、 ClassCastException ;
CheckedException 如: I/O 错误导致的 IOException、SQLException。
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如果出现RuntimeException,那么一定是程序员代码书写导致的错误,如栈溢出,空指针等。
CheckedException:一般是外部错误,这种异常都发生在编译阶段,Java 编译器会强制程序去捕获此类异常,即会出现要求你把这段可能出现异常的程序进行 try catch,该类异常一般包括两个方面:
- 试图在文件尾部读取数据
- 试图打开一个错误格式的 URL
- 试图根据给定的字符串查找 class 对象,而这个字符串表示的类并不存
注:异常种类繁多没必要全部记住,但需要掌握常见的异常。
异常处理机制:
异常处理可看做抛抓模型。抛:当程序执行或编译出现异常时,会在异常处自动生成一个异常对象抛出,一旦抛出对象,其后代码不再运行。抓:可看做异常的处理方式catch
处理方式1:try-catch-finally,try中的结构出现的异常类型由catch一一列举处理,处理后直接进行下个结构的代码。
处理方式2:throws,只是将异常抛给了方法的调用者,在上级体系还是需要异常处理方式一来解决。
怎么选择用try-catch-finally还是throws:
1,如果父类被重写的方法没有用throws方式处理异常,则子类中重写的方法也不能使用throws。且子类重写的方法中抛出的异常不应大于父类中抛出的异常。
2,执行的方法a中,如果又调用了几个方法,且为递进关系执行,建议用throws的方法处理,a中可用tcf方法处理。
自定义异常类:
1,继承现有的异常结构
2,提供全局常量:serialVersionUID
3,提供重载的构造器
throw与throws区别:
throw是异常处理的一种方式,用于手动生成 抛出一个异常对象,throws用于声明异常,把异常抛往更高级结构。
注:当出现异常时代码直接跳转到相应的catch结构或finally结构,其中finally是可选的结构。
catch中的异常类型如果满足子父类关系,则子类必须放在父类之上。