前言(此文只是概念)
什么是AIP,有什么好处?
概括成一句话:帮助我们站在巨人的肩膀上,实现更加高效的开发
一些预先定义好的函数,无需理解其内部机制和细节,就可以使用其功能,作为规则,面向接口开发
常用的api包
- Java.util工具包:包含各种实用工具类/集合类/日期时间工具等各种常用工具包
- java.lang:java的核心包,包含了java基础类
Object类的方法
1.Object.tostring();
父类默认是对象内存地址值
如果想看对象的属性方法值,必须重写Object.toString的方法
2.Object.hashCode();
1.经过地址的hash算法后返回对象hash值
3.Object. equals();
- 底层用了==进行对象间的比较,==比较的是两个对象的地址值
- 如果要判断两个对象间的所有属性值相同,比较结果为true,就需要重写equals();
- 否则使用的是Object的默认实现,通过==比较的是两个对象的地址值,不是属性
- String底层重写了equals(),所以equals()比较的是具体的值
StringBuilder和StringBuffer类
StringBuffer:JDK1.0中就有了,线程是安全
StringBuilder:JDK1.5推出的,线程不安全
执行效率:StringBuilder >> StringBuffer >> String
实际上区别不大父类都继承的是AbstractStringBuilder,只不过Buffer把代码加了同步关键字
String底层
String底层存的是常量 char[],存在堆中常量池中,同样的数据首次创建时新建,第二次不新建,到常量池中 找之前数据直接使用
包装类
Number抽象类
Number类是包装类的抽象父类
Integer类
Integer.alueOf()高效效果
在-128~127范围内,相同的数据只会存一次,后续在存都是使用之前存过的数据地址即数据
自动装箱
// 底层自动调用了Integer.valueOf(50);是高效效果创建的
Integer i = 50;//即可完成装箱
自动拆箱
//编译器会自动把包装类型的类拆掉箱子,
//变回基本类型数据,然后交给int i来保存
//自动拆箱调用的底层代码是intValue();
int i = new Integer(50);//自动拆箱
BigDecimal类,精准计算浮点型
此类主要用来解决浮点数计算不精准的问题
BigDecimal的坑
- 类构造方法请不要填写Double类型数据
- 因为二进制浮点值十进制表示形式,它本身储存就不精准
BigDecimal的除法运算
错误写法
//着种写法不正确,在除不尽的情况下会报算数异常除不尽
divide(BigDecimal);
正确写法
/**
* BigDecimal:除数
* n:除完需要保留几位小数
* o: 舍入方式
*/
divide(BigDecimal,n,o);
舍入方式:具体也可参考API
ROUND_HALF_UP
四舍五入,五入 如:4.4结果是4; 4.5结果是5
ROUND_HALF_DOWN
五舍六入,五不入 如:4.5结果是4; 4.6结果是5
ROUND_HALF_EVEN
公平舍入(银行常用)如:在5和6之间,靠近5就舍弃成5,靠近6就进位成6,如果是5.5,就找偶数,变成6
ROUND_UP
直接进位,不算0.1还是0.9,都进位
ROUND_DOWN
直接舍弃,不算0.1还是0.9,都舍弃
ROUND_CEILING
(天花板) 向上取整,取实际值的大值
朝正无穷方向round 如果为正数,行为和round_up一样,如果为负数,行为和round_down一样
ROUND_FLOOR
(地板) 向下取整,取实际值的小值
朝负无穷方向round 如果为正数,行为和round_down一样,如果为负数,行为和round_up一样
IO流
字节流和字符流区别
- 字节流:真对二进制文件读取的
- 字符流:针对文本文件,读写容易出现乱码的现象,在读写时,最好指定编码集为UTF-8