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):获取指定时区
- static Set
- 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);