Java常用库API学习笔记

好记性不如烂笔头,还是写一下

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)
  • 先做非空判断,再比较两个对象
  • 相比于Objectequals不会出现空指针调用的情况。例: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:当前要插入的元素要放后面
img_show