2022-7-29 第一小组 甘源册 学习笔记
知识点:
异常(了解) 抛出异常的方法(理解) finally关键字(理解)
学习心情:
异常,知识点相较于前边的面向对象具体的多,学的轻松,心情还好(就是晚饭没咋吃饱!)
1.异常
遇到异常的时候会终止,当程序抛出一个异常时,抛异常后面的语句不再执行,类似于return的功能。
重写的方法不能抛出比被重写方法更大的异常类型
1.1异常的体系结构
-
最顶级的异常Throwable 包括(直接子类):错误(Error) 异常(Exception)
- Error——正常情况下不太可能出现的,绝大多数Error都会导致程序处于非正常的状态下,很难恢复。在外力的作用下,不考虑。(它是在Java程序处理范围之外的)
- Exception——Java语言中,将程序执行中不正常的情况称之为异常
- 编译期异常:写代码时,抛异常。如果编译器不解决,会编译不通过,一直报红
- 运行期异常:RuntimeException,运行时会抛出异常,平时没事。
-
自定义异常:
-
Java中异常的机制比较完善,但是结合实际业务。
-
所有的异常必须是Throwable的子类(大材小用,没必要)
-
继承异常
-
自定义编译期异常:继承Exception
-
自定义运行期异常:继承RuntimeException
-
-
-
-
自定义异常类的规则:
-
错误码,异常现象,无参构造器,有参构造器,getter方法,setter方法
-
//错误码---通常是我们自己定义的规则 private Integer code; //异常信息 private String message; public ServiceException() { } public ServiceException(Integer code, String message) { this.code = code; this.message = message; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } @Override public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } //使用情况 throw new ServiceException(101,"账户不能为空");
-
-
开发中,大部分情况下使用的都是运行器异常
1.2抛出异常方法
在一个语句块中,如果使用throw抛出一个编译期异常的话,就必须在方法的声明处使用throws关键字来标记异常类型
-
throw语句可以当做方法的返回值的。
-
在方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。
-
// throw new 异常类构造器(参数);
-
-
throws 声明异常
- 在 方法声明处(方法名)后使用 throws 异常类
- throws并不是真正的解决了异常,只是把异常给抛给了下一级调用者。
- 一个方法是可以抛多个异常,用逗号隔开
-
try{......}catch{....}——处理异常
-
Integer d=0; Integer a=111; try { //把有可能抛异常的代码放到try语句块里 //try里面的语句遇到异常会跳到catch语句里 System.out.println(a/d); }catch (ArithmeticException e){ System.out.println("除数不能为0"); //打印异常信息 e.printStackTrace(); }
-
try catch的catch中应该写指定的异常(例如如果可能出现空指针异常,就不能写最大的异常)
-
catch可以重复的写,但是(把小的异常写上面,大的异常写下面)
-
为什么要跑抛异常?
- 因为要配合全局异常处理机制来解决问题。
看异常从后往前看
1.3异常链
- 一个异常被抛出之后会继续被调用这个方法的方法捕获或抛出,异常会扩散。
- 如果一个方法没有捕获编译期异常,该方法必须使用throws来声明
1.4finally关键字
finally用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码一定会执行,
-
如果try{...}catch{...}里面的异常没有全部捕获,程序还是会终止,但这个时候finally代码块里的代码一定会执行。
-
try { new Ch02().show(); } catch (MyException e) { e.printStackTrace(); }finally { }
-
大部分情况下使用try...catch...finally
-
- 在finally前面有System.exit(-1)不走finally{}
-
执行顺序:try——>(catch)——>finally——>return(在finally走finally的return,finally没有走try里的return)
注意事项
- 除数为0
- IO流,没有关闭
面试题
throws和throw区别:
throw:在方法体内使用,执行throw语句后就不再执行它后面的语句
throws:在方法名后面使用,表示这个方法可能出现某种异常,需要抛出,可以抛出编译期的异常
本文作者:(≧∇≦)(≧∇≦)(≧∇≦)
本文链接:https://www.cnblogs.com/gycddd/p/16531680.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步