Java常用API
图
Java开发中,API的使用占用了绝大部分代码,毕竟站在巨人的肩膀上能看得更远,熟练使用API开发有利于代码的解耦,写出的代码更加简洁利于维护,更是节省了编程的时间

Math类API

方法 说明
abs 获取绝对值
ceil 向上取整
floor 向下取整
round 四舍五入
max 最大值
pow 幂计算
random 随机值,范围[0,1)

System类API

方法 说明
exit 终止当前运行的虚拟机
currentTimeMillis 当前系统时间戳
arraycopy 数组拷贝

Runtime类API

方法 说明
getRuntime 当前系统的运行环境对象
exit 停止虚拟机
availableProcessors 获得CPU的线程数
maxMemory JVM能从系统中获取总内存大小(单位byte)
totalMemory JVM已经从系统中获取内存大小(单位byte)
freeMemory JVM剩余内存大小(单位byte)
exec 运行cmd命令

Object类API

方法 说明
toString 返回对象的字符串表示形式
equals 比较两个对象是否相等
clone 对象克隆

如果一个接口里面没有抽象方法,表示当前的接口是一个标记接口。如果Cloneable被实现,那么当前类的对象可以被克隆,否则不能被克隆

克隆步骤:

  • 重写Object中的clone方法
  • 让类实现Cloneable接口
  • 创建类对象并调用clone

浅拷贝与深拷贝:

  • 浅拷贝:基本数据类型拷贝值,引用数据类型拷贝引用地址(其中一个对象修改会影响另一个)
  • 深拷贝:基本数据类型拷贝值,引用数据类型会重新创建对象并拷贝其数据值,然后记录新的对象地址(不会对原有对象产生影响),对于字符串依然保持字符串常量池复用方案

BigInteger大整数

BigInteger.valueOf(1);
new BigInteger("整数");

对于-16~16,BigInteger已经提前创建,该范围的对象创建都是同一个,其余才会重新创建,而BigInteger的任何计算操作都是产生一个新的对象

方法 说明
add
subtract
multiply
divide 取整
divideAndRemainder 取余
equals 相等(已重写)
max 最大
min 最小
pow
intValue 转int整数
longValue 转long整数

BigDecimal精确计算

0-10已经创建好

new BigDecimal("2.35").setScale(1, BigDecimal.ROUND_HALF_UP);
  • ROUND_CEILING:向正无穷方向舍入
  • ROUND_DOWN:向零方向舍入
  • ROUND_UP:向远离零的方向舍入
  • ROUND_FLOOR:向负无穷方向舍入
  • ROUND_HALF_DOWN:向最近的一边舍入,两边相等向下舍入,1.55保留一位小数结果为1.5
  • ROUND_HALF_EVEN:向最近的一边舍入,两边相等如果保留位上的数字是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
  • ROUND_HALF_UP:向最近的一边舍入,两边相等向上舍入,1.55保留一位小数结果为1.6
  • ROUND_UNNECESSARY:计算结果是精确的,不需要舍入模式

时间相关

格林尼治时间(Greenwich Mean Time)简称GMT,目前世界标准时间(UTC)已经替换为原子钟,中国属于地球东八区,所以是世界标准世界+8小时

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(new Date());

new SimpleDateFormat("HH:mm:ss").parse("09:00:00");
字母 说明
G Era标识符
y
M 年中的月份
w 年中的周数
W 月份中的周数
D 年中的天数
d 月份中的天数
F 月份中的星期
E 星期中的天数
a AM/PM标记
H 一天中的小时数(0-23)
k 一天中的小时数(1-24)
K AM/PM中的小时数(0-11)
h AM/PM中的小时数(1-12)
m 小时中的分钟数
s 分钟中的秒数
S 毫秒数
z 时区
Z 时区

Calendar日历类:是个抽象类,无法直接创建对象

public static Calendar getInstance()
方法 说明
public final Date getTime() 获取日期对象
public final setTime(Date date) 给日历设置日期
public long getTimeInMillis() 获取时间毫秒值
public void setTimeInMillis() 给日历设置毫秒值
public int get(int field) 取日历中的某个字段信息
public void set(int field, int valur) 修改日历的某个字段信息
public void add(int field, int amount) 为某个字段增加/减少指定的值

注意:月份从0开始,而星期一实际为星期日

Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);

JDK8为何新增时间类?

  • 解决新增前代码复杂问题
  • 解决多线程下安全问题
          ZoneId:时区
        /
       /
Date类 -- Instant:时间戳(世界标准世界)
       \
        \
          ZonedDateTime:带时区的时间

日期格式化类 -- DateTimeFormatter:用于时间的格式化和解析

          LocalDate:年、月、日
        /  
       /
日历类 -- LocalTime:时、分、秒
       \
        \
          LocalDateTime:年、月、日、时、分、秒

          Duration:时间间隔(秒、纳秒)
        /
       /
工具类 -- Period:时间间隔(年、月、日)
       \
        \
          ChronoUnit:时间间隔(所有单位)
  • ZoneId
    • static Set getAvailableZoneIds():获取支持的所有时区
    • static ZoneId systemDefault():获取系统默认时区
    • static ZoneId of(String zoneId):获取指定时区
  • Instant
    • static Instant now():获取当前时间的Instant对象(世界时间)
    • static Instant ofXxx(long epochSecond):根据秒/毫秒/纳秒获取Instant对象
    • ZonedDateTime atZone(ZoneId zone):指定时区
    • boolean isxxx(Instant otherInstant):时间判断相关
    • Instant minusXxx(long millisToSubtract):减少时间相关
    • Instant plusXxx(long millisToAdd):增加时间相关
  • ZonedDateTime
    • static ZonedDateTime now():获取当前时间的ZonedDateTime对象
    • static ZonedDateTime ofXxx:获取指定时间的ZonedDateTime对象
    • ZonedDateTime withXxx:修改时间
    • ZonedDateTime minusXxx:减少时间
    • ZonedDateTime plusXxx:增加时间
  • DateTimeFormatter
    • static DateTimeFormatter ofPattern(String pattern):获取格式对象
    • String format(TemporalAccessor temporal):时间格式化

格式化示例

ZonedDateTime zoneTime = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");
System.out.println(dtf.format(zoneTime)); // 2023-02-23 11:05:11 星期四 上午

时间间隔工具示例

LocalDateTime now = LocalDateTime.now();
LocalDateTime time = LocalDateTime.of(2022, 1, 1, 0, 0, 0, 0);
long between = ChronoUnit.DAYS.between(time, now);