Java异常

解决精度问题

BigDecimal

BigDecimal a = BigDecimal.valueOf(?)

divide 除法

收集Stream流

  • 收集Stream流的含义:就是把Stream流操作后的结果数据转回到集合或者数组中去。(为什么?)
  1. Stream流,是一种方便操作集合/数组的一种手段
  2. 集合/数组,才是最终的目的,因为你操作完的数据需要传到其他方法中使用,而其他方法中会用集合或者数组。
  • 具体方式查手册,下面演示
//目标是收集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. 担心程序员的技术不行,在编译阶段就爆出一个错误,目的在于提醒不要出错!
  2. 编译时异常是可遇不可求的,遇到了就遇到了

异常的默认处理流程
  • 默认处理机制会使程序死亡

编译时异常处理机制
  • 编译时异常的处理形式有三种:
  1. 出现异常直接抛出给调用者,调用者也继续抛出去。
  2. 出现异常自己捕获处理,不麻烦别人
  3. 前两者结合,出现异常直接抛出去给调用者,调用者捕获处理。
  • 异常处理方式1——throws
  1. throws:在用法上,可以见方法内部出现的异常抛出去给本方法的调用者处理。
  2. 这种方式并不好,发生异常的方法自己不处理异常,如果一场最终抛出去给虚拟机将引起程序死亡

方法 throws Exception{}

  • 异常处理方式2——try…catch…
  1. 监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理。
  2. 这种方式还可以。发生异常的方法自己独立完成异常的处理,程序可以继续往下执行。

建议格式

try{
//可能出翔异常的代码
}catch(Exception e){
e.printStackTrace();//直接打印异常栈信息
}

Exception可以捕获处理一切异常类型
  • 异常处理方式3——前两者结合
  1. 方法直接将一场通过throws抛出去给调用者
  2. 调用者收到异常后直接捕获处理

白化就是:方式二不能知道程序正常执行是否真的都执行了。方式三就是在外层再加一层,这样就知道这个方法是否正确的执行。

异常处理总结
  1. 在开发中按照规范来说第三种方式是最好的:底层的一场抛出去给最外层,最外层集中捕获处理。
  2. 实际应用中,只要代码能够编译通过,并且功能能完成,那么每一种异常处理方式似乎也都是可以的。

运行时异常的处理形式
  • 在方法出try catch

异常处理时代码更稳健的案例

自定义异常
  • 自定义异常的必要
  1. java无法为这个世界上全部的问题提供异常类
  2. 如果企业向通过异常的方式来管理自己某个业务问题,就需要自定义异常类了。
  • 自定义异常的好处
  1. 可以使用异常的机制管理业务问题,如提醒程序员注意
  2. 同时一旦出现bug,可以用异常的形式清晰的指出出错的地方
  • 分类
  1. 自定义编译时异常
  1. 定义一个异常类继承Exception
  2. 重写构造器
  3. 再出现异常的地方用throw new自定义对象抛出,作用:编译时异常时编译阶段就报错,提醒更加强烈,一定需要处理!!!!
  1. 定义运行时异常
  1. 定义一个异常类继承RuntimeException
  2. 重写构造器
  3. 再出现异常的地方用throw new自定义对象抛出,作用:提醒不强烈,编译姐u但不报错,运行才可能出现!!!

你可能感兴趣的:(java,开发语言)