JAVA API的大纲介绍

前言(此文只是概念)

什么是AIP,有什么好处?

概括成一句话:帮助我们站在巨人的肩膀上,实现更加高效的开发
一些预先定义好的函数,无需理解其内部机制和细节,就可以使用其功能,作为规则,面向接口开发

常用的api包

  1. Java.util工具包:包含各种实用工具类/集合类/日期时间工具等各种常用工具包
  2. java.lang:java的核心包,包含了java基础类

Object类的方法

1.Object.tostring();

父类默认是对象内存地址值
如果想看对象的属性方法值,必须重写Object.toString的方法

2.Object.hashCode();

1.经过地址的hash算法后返回对象hash值

3.Object. equals();

  1. 底层用了==进行对象间的比较,==比较的是两个对象的地址值
  2. 如果要判断两个对象间的所有属性值相同,比较结果为true,就需要重写equals();
  3. 否则使用的是Object的默认实现,通过==比较的是两个对象的地址值,不是属性
  4. 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
上一篇:java的BigDecimal比较大小


下一篇:使用BigDecimal的运算