
今天结束了javase的最后阶段上节课剩余的异常的finally以及处理流程还有常用工具类的介绍。一.finally不管是否发生异常finally里的代码一定会被执行一般finally里执行的是善后的操作或一些资源清理的扫尾工作补充try-catch中try后可写小括号可把finally合并起来如try {return 10;}finally {return 20;}⇒ 返回的是20即使遇到return了finally也还是会执行虽然可以运行但工作中最好不要在finally中写return语句异常的处理流程如果有多个异常报错应该先看第一行的这才是根本原因⇒ 异常信息调用栈建议从上往下排除异常如果向上一直传递都没有合适的方法处理异常最终就会交给JVM处理程序就会异常终止流程总结1. 程序先执行try中的代码2. 如果try中的代码出现异常就会结束try中的代码看和catch中的异常类型是否匹配3. 如果找到匹配的异常类型就会执行catch中的代码4. 如果没有找到匹配的异常类型就会将异常向上传递到上层调用者5. 无论是否找到匹配的异常类型finally中的代码都会被执行到在该方法结束之前执行6. 如果上层调用者也没有处理的了异常就继续向上传递7. 一直到main方法也没有合适的代码处理异常就会交给JVM处理此时程序就会异常终止二.自定义异常类要继承Exception这个类 — 默认自定义的异常类是一个受查异常/编译异常要继承RuntimeException这个类 — 此时这个异常类是非受查异常/运行异常⇒ 运行异常一般是代码写错参数传错、空指针、输入错、越界、类型转换错误等编译异常一般是外部环境问题文件不存在、网络断开、IO失败等三.常用工具类介绍1、日期相关类(1) Date类早期用于表示日期和时间的类位于java.util包中Date date new Date(123,2,5);① Date默认的时间是1900年起计算的 → 实际是19001232023用来确定年份② 2代表3月0代表1月实际输出为3月③ 代表实际的日期(2) LocalDateTime类创建对象时直接实例化不行有3种方式① LocalDateTime now LocalDateTime.now();② LocalDateTime now LocalDateTime.of(创建指定日期)③ LocalDateTime now LocalDateTime.parse(2023-05-07T10:30:00); 通过字符串创建指定日期其常用方法① 获取当前日期 .now() 方法② .getYear().getMonthValue().getDayOfMonth().getHour().getMinute().getSecond()分别获取年月日时分秒③ 创建指定日期 .of() 方法④ 根据字符串创建日期String date 2026-10-01 10:30:21需要创建一个自定义的日期时间格式化器DateTimeFormatter date1 DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)LocalDateTime date2 LocalDateTime.parse(date, date1)⑤ 日期运算LocalDateTime date LocalDateTime.now();LocalDateTime datePlus date.plusDays(1);增加plus减少minus• .plusWeeks• .plusMonths• .plusYears⑥ 根据当前时间获取指定时间LocalDateTime date1 date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))当前所在周的周一/周天.with(TemporalAdjusters.firstDayOfMonth()).with(TemporalAdjusters.lastDayOfMonth())当前所在月的第1天/最后1天2、BigDecimal类用来对超过16位有效位的数进行精确的运算(1) 常用的构造方法BigDecimal(int)/(double)/(long)/(string)不建议可能会丢失精度更推荐用String去创建(2.99)(2) 常用方法 — 加减乘• .add() 加• .subtract() 减• .multiply() 乘除法①(抛出了异常try-catch捕捉一下)指定精度和舍入模式BigDecimal □ □.divide(□,4,RoundingMode.HALF_UP)运算结果小数部分保留4位HALF_UP四舍五入0.5向上舍入还有其他的舍入模式②使用MathContext□.divide(□, new MathContext(4,RoundingMode.HALF_UP))适用于 财务计算货币金额、利息计算科学测量需要保留固定有效位数高精度工程计算税率、费率、汇率换算