Java常用API(Part1)
java API(Part1)
刚开始学java,随便做点学习笔记
Part1含Math,System,Runtime,Object,Objects,BigInteger,BigDecimal库的一些重要函数
Math
私有化构造方法,所有的函数都是静态的

System
工具类,提供一些与系统相关的方法
计算机中的时间原点:1970年1月1日 00:00:00
原因:1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会。开始着手创造一个全新的革命性的操作系统。 他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。
1970年1月1日算C语言的生日
中国位于东八区,时间原点为1970年1月1日 08:00:00
1s=1000ms,1ms=1000微秒.1微秒=1000纳秒

数组拷贝:
如果数据类型不一样会报错
数组越界会报错
如果数据源数组和目的地数组都是引用数据类型,则子类类型可以赋值给父类类型
Runtime
表示当前虚拟机的运行环境

可以通过代码监控虚拟机的内存
可以加上shutdown关机参数实现自动关机
shutdown -s 默认在1min后关机 -s -t 指定时间: 指定时间后关机 -a:取消关机操作 -r:关机并重启
Object
Object是Java中的顶级父类,所有的类都直接或间接地继承于Object类
Object类中的方法可以被所有子类访问

toString
两种打印等价 打印的本质: System:类名 out:静态变量 System.out:获取打印的对象 println():方法 参数:表示打印的内容
核心逻辑:当我们打印一个对象的时候,底层会调用对象的toString方法把对象变成字符串,然后再打印在控制台上,打印完毕后换行
默认情况下,因为Object类中toString方法返回的是地址值,所以打印一个对象打印的就是对象的地址,如果想要看到对象内部的属性值?
如果我们打印一个对象想要看到属性值的话:重写父类toString方法
可用ptg插件快速完成此工作
equals
如果我们比较两个对象想比较属性值而不是默认的地址值的话:重写Object的equals方法
idea中可按alt+insert选择equals() and hashCode()快速完成此工作
如果没有重写equals方法,默认使用Object中的方法进行比较,比较的是地址值
s.equals(sb)
equals方法是s调用的,s是字符串,所以equals方法要看String类中的
String中的equals方法,先判断参数是否为字符串,如果是字符串,再比较内部的属性;如果不是字符串,直接返回false
sb.equals(s)
这里的equals方法要看StringBuilder中的,而StringBuilder中没有重写equals方法,使用的是Object中的,所以比较对象的地址值
clone
把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制
书写细节:
重写Object中的clone方法
让javabean类实现Cloneable接口
创建原对象并调用clone
基本数据类型:存储的是真实的值 引用数据类型:存储的是另一个空间的地址值
浅拷贝:引用数据类型只拷贝地址值 深拷贝:引用数据类型会重新再创建一个新的地址
深拷贝在拷贝String对象时,由于原String对象已在串池StringTable中,所以也只拷贝原地址
Object中的克隆默认为浅克隆,深克隆需要在重写clone()时自己写
可采用第三方工具gson进行深拷贝
将第三方代码导入到项目中
编写代码
Objects

Objects中equals方法细节:
方法底层会判断s1是否为null,若为null,直接返回false;如果不为null,就利用s1再次调用equals方法
此时s1是Student类型,所以最终还是会调用Student中的equals方法
如果没有重写equals方法,比较地址值,如果重写了,比较属性值
如果只用Object中的equals方法,遇到空对象调用equals方法会报错
BigInteger
java中,整数的4种类型byte:1字节,short:2字节,int:4字节,long:8字节

valueOf细节
能表示的范围较小,只能在long的取值范围之内,如果超出long的范围就不行了
在内部对常用的数字-16~16进行了优化,提前把-16~16先创建好了BigInteger的对象,如果多次获取不会创建新的
BigInteger对象一旦创建,内部记录的值不能发生改变
小结
如果BigInteger表示的数没有超出long范围可用静态方法获取
如果超出则用构造方法获取
对象一旦创建,内部记录的值不能发生改变
只要进行计算都会产生一个新的BigInteger对象

BigDecimal
如果要表示的数字不大,没有超过double的取值范围建议使用valueOf
如果比较大,超出了double的取值范围,建议使用构造方法
如果传递的是[0,10]之间的整数,方法会返回已经创建好的对象
加减乘除类似于BigInteger

舍入模式:RoundingMode.HALF_UP四舍五入

感谢Up主@LuckyPuppy514制作的Markdown转B站专栏油猴脚本