常用API(二)
Math
Math代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。
Math类提供的常用方法
方法名 | 说明 |
---|---|
public static int abs(int a) | 获取参数绝对值 |
public static double ceil(double a) | 向上取整 |
public static double floor(double a) | 向下取整 |
public static int round(float a) | 四舍五入 |
public static int max(int a,int b) | 获取两个int值中的较大值 |
public static int min(int a,int b) | 获取两个int值中的较小值 |
public static double pow(double a,double b) | 返回a的b次幂的值 |
public static double random() | 返回值为double的随机值,范围[0.0,1.0) |
System
System代表程序所在的系统,也是一个工具类。
System的常用方法
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的Java虚拟机,参数用作状态代码,非零状态代码表示异常终止。 |
public static long currentTimeMillis() | 返回当前系统的时间毫秒值形式,时间毫秒值指的是从1970-1-1 00:00:00开始走到此刻的总的毫秒值 |
Runtime
Runtime代表程序所在的运行环境,是一个单例类。
Runtime的常用方法
方法名 | 说明 |
---|---|
public static Runtime getRuntime() | 返回与当前Java应用程序关联的运行时对象 |
public void exit(int status) | 终止当前运行的虚拟机,参数用作状态代码,非零状态代码表示异常终止 |
public int availableProcessors() | 返回Java虚拟机可用的处理器数 |
public long totalMemory() | 返回Java虚拟机中的内存总量 |
public long freeMemory() | 返回Java虚拟机中的可用内存 |
public Process exec(String command) | 启动某个程序,并返回代表该程序的对象 |
BigDecimal
BigDecimal用于解决浮点型运算时出现的结果失真的问题。
BigDecimal的常用构造器
构造器 | 说明 |
---|---|
public BigDecimal(double val) 注意:不推荐使用这个 | 将 double转换为 BigDecimal |
public BigDecimal(String val) | 把String转成BigDecimal |
BigDecimal的常用方法
方法名 | 说明 |
---|---|
public static BigDecimal valueOf(double val) 推荐使用这个创建BigDecimal对象 | 转换一个 double成 BigDecimal |
public BigDecimal add(BigDecimal b) | 加法 |
public BigDecimal subtract(BigDecimal b) | 减法 |
public BigDecimal multiply(BigDecimal b) | 乘法 |
public BigDecimal divide(BigDecimal b) | 除法,当结果是无限小数时会报错 |
public BigDecimal divide (另一个BigDecimal对象,精确几位,舍入模式) | 除法,可以控制精确到小数几位以及舍入模式 |
public double doubleValue() | 将BigDecimal转换为double |
JDK8之前传统的日期、时间
Date
Date代表的是系统的日期和时间。
Date的常用构造器
构造器 | 说明 |
---|---|
public Date() | 创建一个Date对象,代表的是系统当前此刻日期时间。 |
public Date(long time) | 把时间毫秒值转换成Date日期对象。 |
Date的常用方法
方法名 | 说明 |
---|---|
public long getTime() | 返回从1970年1月1日 00:00:00走到此刻的总的毫秒数 |
public void setTime(long time) | 设置日期对象的时间为参数时间毫秒值对应的时间 |
SimpleDateFormat
SimpleDateFormat代表简单日期格式化,可以用来把日期对象、时间毫秒值格式化成我们想要的形式。
SimpleDateFormat的常用构造器
构造器 | 说明 |
---|---|
public SimpleDateFormat(String pattern) | 创建简单日期格式化对象,并封装时间的格式 |
SimpleDateFormat格式化时间的方法
格式化时间的方法 | 说明 |
---|---|
public final String format(Date date) | 将日期格式化成日期/时间字符串 |
public final String format(Object time) | 将时间毫秒值式化成日期/时间字符串 |
时间格式的常用符号
符号 | 意思 |
---|---|
y | 年 |
M | 月 |
d | 日 |
H | 时 |
m | 分 |
s | 秒 |
E | 星期 |
a | 上午/下午 |
SimpleDateFormat解析字符串时间称为日期对象
解析方法 | 说明 |
---|---|
public Date parse(String source) | 把字符串时间解析成日期对象 |
- 创建SimpleDateFormat对象时指定的时间格式必须与被解析的时间格式一模一样,否则程序会出错。
Calendar
Calendar代表的是系统此刻时间对应的日历,通过它可以方便地单独获取、修改时间中的年、月、日、时、分、秒等。
获取Calendar对象的方法
Calendar 对象名 = Calendar.getInstance();
Calendar的常用方法
方法名 | 说明 |
---|---|
public static Calendar getInstance() | 获取当前日历对象 |
public int get(int field) | 获取日历中的某个信息 |
public final Date getTime() | 获取日期对象 |
public long getTimeInMillis() | 获取时间毫秒值 |
public void set(int field,int value) | 修改日历的某个信息 |
public void add(int field,int amount) | 为某个信息增加/减少指定的值 |
public final void setTime(Date date) | 使用给定的Date对象设置此日历的时间 |
-
Calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。
-
Calendar的月份是从0开始计算的。
-
可以通过System.out.println(Calendar对象);来查看对应的field,并通过Calendar.YEAR等来使用。
JDK8开始新增的日期、时间
为什么要学JDK8新增的时间
JDK8之前传统的时间API | JDK8之后新增的时间API |
---|---|
设计不合理,使用不方便,很多都被淘汰了 | 设计更合理,功能丰富,使用更方便。 |
都是可变对象,修改后会丢失最开始的时间信息 | 都是不可变对象,修改后会返回新的时间对象,不会丢失最开始的时间 |
线程不安全 | 线程安全 |
只能精确到毫秒 | 能精确到毫秒、纳秒 |
JDK8新增的时间API(都是java.time下的包)
代替Calendar | 代替Date | 代替SimpleDateFormat | 其他补充 |
---|---|---|---|
LocalDate:年、月、日 LocalTime:时、分、秒 LocalDateTime:年、月、日、时、分、秒 ZoneId:时区 ZonedDateTime:带时区的时间 |
Instant:时间戳/时间线 | DateTimeFormatter::用于时间的格式化和解析 | Period:时间间隔(年,月,日) Duration:时间间隔(时、分、秒,纳秒) |
LocalDate、LocalTime、LocalDateTime
- LocalDate:代表本地日期(年、月、日、星期)。
- LocalTime:代表本地时间(时、分、秒、纳秒)。
- LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)。
获取对象的方案
方法名 | 示例 |
---|---|
public static Xxxx now(): 获取系统当前时间对应的该对象 | LocaDate ld = LocalDate.now(); LocalTime lt = LocalTime.now(); LocalDateTime ldt = LocalDateTime.now(); |
public static Xxxx of(…): 获取指定时间的对象 | LocalDate localDate1 = LocalDate.of(2099 , 11,11); LocalTime localTime1 = LocalTime.of(9, 8, 59); LocalDateTime localDateTime1 = LocalDateTime.of(2025, 11, 16, 14, 30, 01); |
LocalDate的常用API(都是处理年、月、日、星期相关的)
方法名 | 说明 |
---|---|
public int getYear() | 获取年 |
public int getMonthValue() | 获取月份(1-12) |
public int getDayOfMonth() | 获取日 |
public int getDayOfYear() | 获取当前是一年中的第几天 |
Public DayOfWeek getDayOfWeek() | 获取星期几:ld.getDayOfWeek().getValue(); |
withYear、withMonth、withDayOfMonth、withDayOfYear | 直接修改某个信息,返回新日期对象 |
plusYears、plusMonths、plusDays、plusWeeks | 把某个信息加多少,返回新日期对象 |
minusYears、minusMonths、minusDays,minusWeeks | 把某个信息减多少,返回新日期对象 |
equals、isBefore、isAfter | 判断两个日期对象,是否相等,在前还是在后 |
LocalTime的常用API(都是处理时、分、秒、纳秒相关的)
方法名 | 说明 |
---|---|
public int getHour() | 获取小时 |
public int getMinute() | 获取分 |
public int getSecond() | 获取秒 |
public int getNano() | 获取纳秒 |
withHour、withMinute、withSecond、withNano | 修改时间,返回新时间对象 |
plusHours、plusMinutes、plusSeconds、plusNanos | 把某个信息加多少,返回新时间对象 |
minusHours、minusMinutes、minusSeconds、minusNanos | 把某个信息减多少,返回新时间对象 |
equals、isBefore、isAfter | 判断两个时间对象,是否相等,在前还是在后 |
LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒相关的)
方法名 | 说明 |
---|---|
getYear、getMonthValue、getDayOfMonth、getDayOfYear getDayOfWeek、getHour、getMinute、getSecond、getNano |
获取年月日、时分秒、纳秒等 |
withYear、withMonth、withDayOfMonth、withDayOfYear withHour、withMinute、withSecond、withNano |
修改某个信息,返回新日期时间对象 |
plusYears、plusMonths、plusDays、plusWeeks plusHours、plusMinutes、plusSeconds、plusNanos |
把某个信息加多少,返回新日期时间对象 |
minusYears、minusMonths、minusDays、minusWeeks minusHours、minusMinutes、minusSeconds、minusNanos |
把某个信息减多少,返回新日期时间对象 |
equals isBefore isAfter | 判断两个时间对象,是否相等,在前还是在后 |
LocalDateTime的转换成LocalDate、LocalTime
方法名 | 说明 |
---|---|
public LocalDate toLocalDate() | 转换成一个LocalDate对象 |
public LocalTime toLocalTime() | 转换成一个LocalTime对象 |
ZoneId、ZoneDateTime
什么是时区
由于世界各个国家与地区的经度不同,各地区的时间也有所不同,因此会划分为不同的时区。一般用洲名/城市名或国家名/城市名命名,如:Asia/Shanghai、Asia/Chongqing或America/New_York。
ZoneId
ZoneId代表时区id。
ZoneId的常用方法
方法名 | 说明 |
---|---|
public static Set<String> getAvailableZoneIds() | 获取Java中支持的所有时区 |
public static ZoneId systemDefault() | 获取系统默认时区 |
public static ZoneId of(String zoneId) | 获取一个指定时区 |
ZonedDateTime
ZonedDateTime代表带时区时间。
ZonedDateTime的常用方法
方法名 | 说明 |
---|---|
public static ZonedDateTime now() | 获取当前时区的ZonedDateTime对象 |
public static ZonedDateTime now(ZoneId zone) | 获取指定时区的ZonedDateTime对象 |
getYear、getMonthValue、getDayOfMonth、getDayOfYear getDayOfWeek、getHour、getMinute、getSecond、getNano |
获取年月日、时分秒、纳秒等 |
public ZonedDateTime withXxx(时间) | 修改时间系列的方法 |
public ZonedDateTime minusXxx(时间) | 减少时间系列的方法 |
public ZonedDateTime plusXxx(时间) | 增加时间系列的方法 |
获取世界标准时间:ZonedDateTime now = ZonedDateTime.now(Clock.systemUTC());
Instant
Instant代表时间线上的某个时刻/时间戳。通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数 + 不够1秒的纳秒数。
作用
可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。
Instant的常用方法
方法名 | 说明 |
---|---|
public static Instant now() | 获取当前时间的Instant对象(标准时间) |
public long getEpochSecond() | 获取从1970-01-01T00:00:00开始记录的秒数。 |
public int getNano() | 从时间线开始,获取从第二个开始的纳秒数 |
plusMillis、plusSeconds、plusNanos | 增加时间系列的方法 |
minusMillis、minusSeconds、minusNanos | 减少时间系列的方法 |
equals、isBefore、isAfter | 判断系列的方法 |
DateTimeFormatter
DateTimeFormatter是线程安全的。
DateTimeFormatter的常用方法
方法名 | 说明 |
---|---|
public static DateTimeFormatter ofPattern(时间格式) | 获取格式化器对象 |
public String format(时间对象) | 格式化时间 |
LocalDateTime提供的格式化、解析时间的方法:
方法名 | 说明 |
---|---|
public String format(DateTimeFormatter formatter) | 格式化时间 |
public static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) | 解析时间 |
解析时间一般使用返回LocalDateTime的parse()。
Period
Period可以用于计算两个 LocalDate对象 相差的年数、月数、天。
Perion的常用方法
方法名 | 说明 |
---|---|
public static Period between(LocalDate start, LocalDate end) | 传入两个日期对象,得到Period对象 |
public int getYears() | 计算隔几年,并返回 |
public int getMonths() | 计算隔几个月,年返回 |
public int getDays() | 计算隔几天,并返回 |
Duration
Duration可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime、LocalDateTime、Instant等时间。
Duration的常用方法
方法名 | 说明 |
---|---|
public static Duration between(开始时间对象, 截止时间对象) | 传入两个时间对象,得到Duration对象 |
public long toDays() | 计算隔多少天,并返回 |
public long toHours() | 计算隔多少小时,并返回 |
public long toMinutes() | 计算隔多少分钟,并返回 |
public long toSeconds() | 计算隔多少秒,并返回 |
public long toMillis() | 计算隔多少毫秒,并返回 |
public long toNanos() | 计算隔多少纳秒,并返回 |
Arrays
Arrays是用来操作数组的一个工具类。
Arrays的常用方法
方法名 | 说明 |
---|---|
public static String toString(类型[] arr) | 返回数组的内容 |
public static int[] copyOfRange(类型[] arr, 起始索引, 结束索引) | 拷贝数组(指定范围) |
public static copyOf(类型[] arr, int newLength) | 拷贝数组 |
public static setAll(double[] array, IntToDoubleFunction generator) | 把数组中的原数据改为新数据 |
public static void sort(类型[] arr) | 对数组进行排序(默认是升序排序) |
如果数组中存储的是对象,如何排序
- 方式一:让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则。
- 方式二:使用下面这个sort方法,创建Comparator比较器接口的匿名内部类对象,然后自己制定比较规则。
public static <T> void sort(T[] arr, Comparator<? super T> c)
自定义排序规则时,需要遵循的官方约定
- 如果认为左边对象大于右边对象 ,应该返回正整数。
- 如果认为左边对象小于右边对象 ,应该返回负整数。
- 如果认为左边对象等于右边对象 ,应该返回整数0。
注意:
- 如果类本身有实现Comparable接口,sort方法同时也重写了Comparator比较器,则默认使用sort的比较器排序。
- 比较值为double类型时,可以直接调用Double.compare()方法。
JDK8新特性:Lambda表达式
Lambda表达式是JDK 8开始新增的一种语法形式。
作用
简化匿名内部类的代码写法。
格式
(被重写方法的形参列表) -> { 被重写方法的方法体代码 }
几点注意
- Lambda表达式只能简化函数式接口的匿名内部类。
- 有且仅有一个抽象方法的接口叫函数式接口。
- 大部分函数式接口,上面都可能会有一个@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。
Lambda表达式的省略规则
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时()也可以省略。
- 如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。
JDK8新特性:方法引用
方法引用用于进一步简化Lambda表达式,其标志性符号是“ :: ”。
静态方法的引用
类名::静态方法。
使用场景
如果某个Lambda表达式里只是调用一个静态方法,并且前后参数的形式一致,就可以使用静态方法引用。
实例方法的引用
对象名::实例方法
使用场景
如果某个Lambda表达式里只是调用一个实例方法,并且前后参数的形式一致,就可以使用实例方法引用。
特定类型方法的应用
类型::方法
使用场景
如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。
构造器引用
类名::new
使用场景
如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。
标签:Java,int,笔记,对象,static,时间,方法,public,第十三天 From: https://www.cnblogs.com/zgg1h/p/18068130