好记性不如烂笔头,还是写一下
Math
- 静态工具类,构造函数为private
Math.ceil()
数轴向右取整,Math.floor()
数轴向左取整Math.abs()
在-2147483648
的时候会有问题,溢出,返回自身。解决方法:特判或Math.absExact()
Math.random()
返回[0.0, 1.0)
之间的随机数
System
- 静态工具类
public static void exit(int status)
终止当前运行的JVM,status = 0
为正常退出,其余异常退出public static long currentTimeMillis()
返回当前系统时的毫秒形式System.arraycopy(原数组, 开始索引, 目的数组, 开始索引, 拷贝个数)
Runtime
- 方法不是静态的,需要先创建对象再调用,但对象不能自己new
public static Runtime getRuntime()
获取当前系统的运行环境对象,返回的是同一个Runtime
对象public void exit(int status)
停止虚拟机public int availableProcessors()
获得CPU的线程数public long maxMemory()
JVM从系统中能获取总内存大小(单位byte)public long totalMemory()
JVM已经从系统中获取总内存大小(单位byte)public long freeMemory()
JVM剩余内存大小(单位byte)public Process exec(String command)
运行 cmd 命令
Object
- 顶级父类
toString()
public String toString()
返回字符串形式。形如java.lang.Object@119d7047 (对象名+@+哈希地址)
System.out.println(Object)
方法就是对象非空调用toString()
,为空返回null
重写子类中的
toString()
可以自定义打印
equals()
public boolean equals(Object obj)
- 判断两个对象是否相等
Object
中用==
实现的,比较地址- 比较内容需要重写子类的
equals()
,需要判非空
clone()
protected native Object clone() throws CloneNotSupportedException;
- 子类要使用需要重写
clone
方法,实现Cloneable
标记性接口 Object()
的clone()
是浅拷贝。基本数据类型拷贝数据值,字符串拷贝串池地址,引用数据拷贝堆地址- 深拷贝需要自己实现,要么手写,要么用第三方库(转为json再转回来)
Objects
- 工具类
equals()
public static boolean equals(Object a, Object b)
- 先做非空判断,再比较两个对象
- 相比于
Object
的equals
不会出现空指针调用的情况。例:a = null; a.equals(b);
isNull()
public static boolean isNull(Object obj)
nonNull ()
public static boolean nonNull(Object obj)
BigInteger
- 大整数类
- 对象一旦创建,内部的值不能变
- 只要进行计算都会产生一个新的BigInteger对象
构造方法
public BigInteger(int num, Random rnd)
:获取随机大整数,范围public BigInteger(String val)
public BigInteger(String val, int radix)
:获取指定进制的大整数public static BigInteger valueOf(long value)
有优化:对于-16~16先创建好对象,重用
时间库
Date
Date date = new Date(); Date date2 = new Date(指定毫秒值);
setTime(毫秒值);
修改时间对象中的毫秒值getTime();
获取时间对象中的毫秒值
SimpleDateFormat
作用
- 格式化:把时间按指定的格式输出
- 解析:把字符串表示的时间转换成Date对象
构造
public SimpleDateFormat()
public SimpleDateFormat(String pattern)
:以指定格式构造
常用方法
public final String format(Date date)
:格式化(日期对象 -> 字符串)public Date parse(String source)
:解析(字符串 -> 日期对象)
示例
2023-11-11 13:27:06 对应 yyyy-MM-dd HH:mm:ss
格式化:
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String str = sdf.format(d);
System.out.println(str);
解析:
String str = "2023-11-11 11:11:11";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date.getTime());
Arrays
public static String toString(数组)
:把数组拼接成一个字符串public static int binarySearch(数组,查找的元素)
:二分查找元素public static int[] copyOf(原数组, 新数组长度)
:拷贝public static int[] copyOfRange(原数组, 起始索引, 结束索引)
:拷贝指定范围的数组public static void fill(数组, 元素)
public static void sort(数组)
public static void sort(数组, 排序规则)
binarySearch()
- 有序才能用
- 存在的话返回索引
- 不存在返回 - 插入点 - 1
sort(arr, 规则)
Arrays.sort(arr, 规则)
。- 插入排序 + 二分查找
- 这里的规则是一个接口,可以通过传入一个匿名内部类或者lamda体实现
Arrays.sort(arr, new Comparator<Integer>(){
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2;//升序
}
})
返回值:
- 负数:当前要插入的元素要放前面
- 正数和0:当前要插入的元素要放后面