前言
Java的异常处理学习笔记
概念
错误信息
常见异常的继承结构
Throwable > Error:系统级错误 > Exception > > NullPointerException > > ArrayIndexOutOfBoundsException > > NumberFormatException > > ClassCastException > > ClassNotFoundException > > ...
catch
AException
、BException
:任意一种异常
1 2 3 4 5
| try { ... } catch(Exception e) { ... }
|
多个异常
1 2 3 4 5 6 7
| try { ... } catch(AException a) { ... } catch(BException b) { ... }
|
finally
- 不管出错还是不出错都会执行(无论
return
还是break
)
1 2 3 4 5 6 7
| try { ... } catch(Exception e) { ... } finally { ... }
|
throws
1 2 3
| void function() throws Exception { ... }
|
- 方法上有默认的异常管道类型
RuntimeException
抛出多个异常
1 2 3
| void function() throws AException, BException { ... }
|
异常的注意事项
异常处理只有两种方式:catch
和throws
异常处理,必须二选一
Java语法强制开发者事先考虑异常如何处理
初级开发者,可能会捕获,但不处理异常
方法重写时,异常管道不能比父类方法多
如何选择
- 底层异常,应该向前抛到前面处理
- 经验少时不知道该在什么位置捕获处理,应该选择throws
throw
- 手动抛出异常,执行异常的抛出动作
- 类比成return
创建异常
1
| AException e = new AException();
|
重载方法
<str>
:提示信息
1
| AException e = new AException(<str>);
|
抛出异常
异常包装
1 2 3 4 5
| try { ... } catch(AException e) { throw new BException(e); }
|
使用场景
- 不能抛的异常类型,包装成能抛出的类型,再抛
- 异常简化,把多种类型异常,简化成一种
自定义的异常
过程
起一个合适的类名
1 2 3
| public class UsernameNotFoundException { ... }
|
继承一个合适的异常父类
1 2 3
| public class UsernameNotFoundException extends Exception { ... }
|
添加合适的构造方法
无参构造
String类型参数
Throwable类型参数
完成