API
1.Number
数字格式化 : # 任意数字,0-9任意单个数字 , 千分位 . 小数点 0 补位
//四位小数
DecimalFormat df = new DecimalFormat("###,###.####");
System.out.println(df.format(1234567.312));//1,234,567.312
//四位小数,不够补0
df = new DecimalFormat("###,###.0000");
System.out.println(df.format(1234567.312));//1,234,567.312
更高精度 : BigDecimal,适合做财务相关软件
//整数
BigInteger b1 = new BigInteger("12312413");
System.out.println(b1);
//小数
BigDecimal v = new BigDecimal(4.3);
System.out.println(v);
BigDecimal v1 = new BigDecimal(20);
BigDecimal v2 = new BigDecimal(10);
//+
BigDecimal result = v1.add(v2);
System.out.println(result);//30
// -
result = v1.subtract(v2);
System.out.println(result);//10
//*
result = v1.multiply(v2);
System.out.println(result);//200
//l
result = v1.divide(v2);
System.out.println(result);//2
// %
result = v1.remainder(v2);
System.out.println(result);//0
异常机制
一.之前遇到的异常
- 下标越界异常(指针超范围)
- 空指针异常(指向null)
- 类型转换异常(类型不一样)
- 堆/栈内存溢出(递归)
- 数字格式化异常(不是纯数字字符串转换)
二. 是什么
异常就是错误的一种描述
异常是java中专门响应错误的一种机制,能够有效的处理异常,并使得异常成为程序中的一部分,能够更有力的增强程序鲁棒性更易于调试
发生异常的原因有很多 :
- 用户输入了非法数据
- 要找的文件不存在
- 网络通信中断
- JVM溢出
功能和目的 : 出现错误后,会终止程序生命周期执行,此时引入异常后,能够保证程序不会终止,并且还能够把错误信息,进行描迷反馈
三.继承体系
四.Execption
4.1 是什么
-
exception作为所有异常类的父类(分为RuntimeException和IOException)
-
RuntimeException : 运行时异常,一般是由于程序员粗心导致,比如空指针,比如 下标越界, 程序员完全可以通过if判断来解决这个问题
-
IOException : 编译时异常,一般需要我们重点学习,另外编译时异常是我们在编码中就需要处理的,如果不处理,不能运行
-
4.2 常用方法
getMessage() : 获取错误信息 一般反馈给客户查看
printStackTrace() : 打印错误追踪栈帧 一般给程序员查看,用来修改代码
4.3 try
4.3.1 第一种用法(单个异常)
try {// 可能会抛出异常的代码 } catch (IOException e) {// 处理异常的代码 }
4.3.2 第二种用法(多个异常)
一个catch捕捉一个异常
try中可以有多个异常,但是只会有一个异常发生(前面的异常发生后结束try中代码后面的异常不会执行) catch可以捕捉多个异常,但是从上到下必须是从子类到父类,或者是没有继承关系
try{// 程序代码 }catch(异常类型1 异常的变量名1){// 程序代码 }catch(异常类型2 异常的变量名2){// 程序代码 }catch(异常类型3 异常的变量名3){// 程序代码 }
4.3.3 第三种用法
1.7新特性 一个catch可以捕捉多个异常,多个异常使用|隔开,但是异常之间必须是没有哦继承关系,如果有继承关系则直接写父类即可
try{// 程序代码 }catch(异常类型1 | 异常类型2 异常的变量名){// 程序代码 }
4.3.4 第四种用法
java7 新特性 自动关闭资源
//传统写法 try{高风险代码 }catch(异常代码){异常处理代码; }finally{关闭资源代码 }
try(打开资源代码){高风险代码 }catch(异常类型 异常的变量名){处理异常代码; }
4.4 throws
4.4.1 第一种用法
-
只是把问题抛出,不会处理问题,只是一种提醒机制
-
当我们调用的方法抛出异常, 要么我们处理异常, 要么也抛出
-
throws 可以抛出多个异常,用多个逗号隔开无所谓先后顺序,也无所谓是否继承
方法 throws 异常类型{代码 }
4.4.2 第二种用法
抛出多个异常,使用逗号隔开 无所谓先后顺序,也无所谓继承关系
方法 throws 异常类型1,异常类型2,异常类型3{代码}
4.4.3 注意-方法覆写
-
不能比原方法拥有更宽泛的异常 子类覆写的方法,可以不抛出异常
-
要么和父类方法抛出的异常一样 要么是父类方法抛出异常类的子类 要么不抛出,把异常处理 不能是父类方法抛出异常类的父类
4.5 Finally
4.5.1 是什么
必须执行的语句块,不能单独使用,需要和 try 或者 try...catch... 一起使用
只有一种情况不执行 : System.exit(0) 退出JVM虚拟机
4.5.2 使用
try{// 程序代码 }catch(异常类型1 异常的变量名1){// 程序代码 }catch(异常类型2 异常的变量名2){// 程序代码 }finally{// 程序代码 }
4.5.3 注意事项
-
不能单独使用
-
除了关闭虚拟机以外,finally一定会执行
4.5.4应用案例
4.6 自定义异常
4.6.1 定义语法
- 创建一个异常类继承一个已有的异常类,─般继承Exception即可
- 如果是运行时异常,则继承RuntimeException
- 提供无参构造及有参构造
public class 异常类类名 extends Exception{public 异常类类名(){}public 异常类类名(String msg){super(msg)} }
五.Error
主要描述的是一些系统内部错误,比如我们之前碰到的栈内存溢出 OOM(内存溢出)