解决精度问题
BigDecimal
BigDecimal a = BigDecimal.valueOf(?)
divide 除法
收集Stream流
- 收集Stream流的含义:就是把Stream流操作后的结果数据转回到集合或者数组中去。(为什么?)
- Stream流,是一种方便操作集合/数组的一种手段
- 集合/数组,才是最终的目的,因为你操作完的数据需要传到其他方法中使用,而其他方法中会用集合或者数组。
-
具体方式查手册,下面演示
//目标是收集Stream流的数据到集合或者数组中去
//关键代码
s.collect(Collectors.toList());//产生可变集合
s.toList()//产生不可变集合
//注意注意:流只能使用一次,上面的用完之后,下面的就不能用了
Object[] arrs = s.toArray//收集数组,用Object来接,因为可能流里面有其他类型,
s.collect(Collectors.toSet());
s.collect(Collectors.toMap());
异常处理
- 什么是异常
异常时程序在"编译"或者"执行"过程中可能出现的问题。但是语法错误不所在一场体系中:如,数组索引月结,空指针异常,日期格式化异常等
- 为什么要学习异常
异常一旦出现,如果没有提前处理,程序会退出JVM虚拟机而终止。
研究异常并且避免异常,然后提前处理异常,体现的时程序的安全性,健壮性
- 异常体系
1.Error:系统级别的问题、JVM退出等,代码无法控制。
2.Exception:java.lang包下,称为异常类,他表示程序本省可以处理的问题。
1)RuntimeException及其子类:运行时异常,编译阶段不会报错
2)除RuntimeException之外所有异常:编译时一场,编译器必须处理的,否则程序不能通过编译。
运行时异常
- ArrayIndexOutOfBoundsException 数组索引越界异常
- NullPointerException 空指针异常
- ClassCastException 类型转换异常
- ArithmeticException 数字操作异常(10/0)
- NumberFarmatException 数字转换异常
编译时异常
- 不是RuntimeException或者其子类的异常,编译阶段就报错,必须处理,否则代码通不过。
示例:格式化日期
String date = "2015-12-21 10:23:22"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
Date d = sdf.parse(date);
System.out.println(d)
- 编译时异常的作用时什么?
- 担心程序员的技术不行,在编译阶段就爆出一个错误,目的在于提醒不要出错!
- 编译时异常是可遇不可求的,遇到了就遇到了
异常的默认处理流程
- 默认处理机制会使程序死亡
编译时异常处理机制
- 编译时异常的处理形式有三种:
- 出现异常直接抛出给调用者,调用者也继续抛出去。
- 出现异常自己捕获处理,不麻烦别人
- 前两者结合,出现异常直接抛出去给调用者,调用者捕获处理。
- 异常处理方式1------throws
- throws:在用法上,可以见方法内部出现的异常抛出去给本方法的调用者处理。
- 这种方式并不好,发生异常的方法自己不处理异常,如果一场最终抛出去给虚拟机将引起程序死亡
方法 throws Exception{}
- 异常处理方式2------try...catch...
- 监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。
- 这种方式还可以。发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。
建议格式
try{
//可能出翔异常的代码
}catch(Exception e){
e.printStackTrace();//直接打印异常栈信息
}
Exception可以捕获处理一切异常类型
- 异常处理方式3------前两者结合
- 方法直接将一场通过throws抛出去给调用者
- 调用者收到异常后直接捕获处理
白化就是:方式二不能知道程序正常执行是否真的都执行了。方式三就是在外层再加一层,这样就知道这个方法是否正确的执行。
异常处理总结
- 在开发中按照规范来说第三种方式是最好的:底层的一场抛出去给最外层,最外层集中捕获处理。
- 实际应用中,只要代码能够编译通过,并且功能能完成,那么每一种异常处理方式似乎也都是可以的。
运行时异常的处理形式
- 在方法出try catch
异常处理时代码更稳健的案例
自定义异常
- 自定义异常的必要
- java无法为这个世界上全部的问题提供异常类
- 如果企业向通过异常的方式来管理自己某个业务问题,就需要自定义异常类了。
- 自定义异常的好处
- 可以使用异常的机制管理业务问题,如提醒程序员注意
- 同时一旦出现bug,可以用异常的形式清晰的指出出错的地方
- 分类
- 自定义编译时异常
- 定义一个异常类继承Exception
- 重写构造器
- 再出现异常的地方用throw new自定义对象抛出,作用:编译时异常时编译阶段就报错,提醒更加强烈,一定需要处理!!!!
- 定义运行时异常
- 定义一个异常类继承RuntimeException
- 重写构造器
- 再出现异常的地方用throw new自定义对象抛出,作用:提醒不强烈,编译姐u但不报错,运行才可能出现!!!