Day19-②常用Api二
常用API二
Math、System、Runtime
Math
- 代表数学,是一个工具类,里面提供的都是对数据进行操作的一些静态方法。
常见方法

System
- System代表程序所在的系统,也是一个工具类。
常见方法

- 时间毫秒值:指的是从1970年1月1日00:00:00走到此刻的总的毫秒数,应该是很大的。1s=1000ms。
- 可以用于计算程序运算时间
Runtime
- 代表程序所在的运行环境。
- Runtime是一个单例类。
常见方法

BigDecimal
简介
- 用于解决浮点型运算时,出现结果失真的问题,
常见构造器、常用方法

- BigDecimal一定要得到一个精确结果
1 | BigDecimal a = BigDecimal.valueOf(0.1); //禁止直接将Double转化为Bigdecimal 会带来误差 |
JDK8之前传统的日期、时间
Date
- 代表的是系统的日期和时间。
常见构造器、常见方法

SimpleDateFormat
- 代表简单日期格式化,可以用来把日期对象、时间毫秒值格式化成我们想要的形式。

常见构造器、常见方法

时间格式化常见符号

1 | Date d = new Date(); //系统时间 |
解析字符串时间成为日期对象

1 | String dateStr = "2025-05-13 11:25:00"; |
Calender
- 代表的是系统此刻时间对应的日历。通过它可以单独获取、修改时间中的年、月、日、时、分、秒等。
常见方法

- 注意:calendar是可变对象,一旦修改后其对象本身表示的时间将产生变化。
JDK8开始新增的日期、时间
新旧对比

- JDK8新增的时间
- LocalDate:年、月、日
- LocalTime:时、分、秒
- LocalDateTime:年、月、日 时、分、秒
- ZoneId:时区
- ZonedDateTime:带时区的时间
- Instant:时间戳/时间线
- DateTimeFormatter:用于时间的格式化和解析
- Duration:时间间隔(时、分、秒、纳秒)
- Period:时间间隔(年,月,日)

LocalDate、LocalTime、LocalDateTime
- LocalDate:代表本地日期(年、月、日、星期)
- NLocalTime:代表本地时间(时、分、秒、纳秒)
- LocalDateTime:代表本地日期、时间(年、月、日、星期、时、分、秒、纳秒)
获取对象的方案

- LocalDate的常用API(都是处理年、月、日、星期相关的)

- LocalTime的常用API(都是处理时、分、秒、纳秒相关的)

- LocalDateTime的常用API(可以处理年、月、日、星期、时、分、秒、纳秒等信息)

ZoneID
代表时区ID
- 洲名/城市名:Asia/Shanghai、Asia/Chongqing
- 国家名/城市名:America/New York
我国的时区:东8区

常见方法

Instant
Instant 时间线上的某个时刻/时间戳。
通过获取Instant的对象可以拿到此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数+不够1秒的纳秒数。
常见方法

- 作用:可以用来记录代码的执行时间,或用于记录用户操作某个事件的时间点。(精确到纳秒)
- 传统的Date类,只能精确到毫秒,并且是可变对象。
- 新增的Instant类,可以精确到纳秒,并且是不可变对象,推荐用Instant代替Date。
DateTimeFormatter
- SimpleDateFormat是线程 不安全 的,而DateTimeFormatter是线程 安全 的
常见方法

LocalDateTime提供的格式化、解析时间的方法

Period(一段时期)
- 可以用于计算两个 LocalDate对象 相差的年数、月数、天数。
常见方法

Duration(持续时间)
- 可以用于计算两个时间对象相差的天数、小时数、分数、秒数、纳秒数;支持LocalTime.、LocalDateTime、Instant等时间。
常见方法

Arrays
简介
- 用来操作数组的一个工具类
常见方法

如何对对象数组进行排序
方式一:让该对象的类实现Comparable(比较规则)接口,然后重写compareTo方法,自己来制定比较规则。
- 实现Comparable<泛型 >接口,重写compareTo方法。

方式二:使用下面这个sort方法,创建Comparator比较器接口的 匿名内部类 对象,然后自己制定比较规则。
| public static |
对数组进行排序(支持自定义排序规则) |
|---|

JDK8新特性:Lamnda表达式
认识Lamnda表达式
- Lambda表达式是JDK8开始新增的一种语法形式,用于 简化匿名内部类 的代码写法。
1 | (被重写方法的形参列表)->{ |
- 注意:Lambda表达式只能简化函数式接口的匿名内部类!!
- 什么是函数式接口?
- 有且仅有一个抽象方法的接口。
- 将来我们见到的大部分函数式接口,上面都可能会有@FunctionalInterface的注解,有该注解的接口就必定是函数式接口。
Lambda表达式的省略规则
- Lambda表达式的省略写法(进一步简化Lambda表达式的写法)
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时()也可以省略。
- 如果Lambda表达式中的方法体代码只有一行代码,可以省略大括号不写,同时要省略分号!此时,如果这行代码是return语句,也必须去掉return不写。
JDK8新特性:方法引用
- 方法引用的标志性符号“ :: ”。
1 | public class Student{ |
1 | //原始写法:对数组中的学生对象,按照年龄升序排序 |
1 | //Lambda写法 |
静态方法的引用
类名::静态方法
如果某个Lambda表达式里只是调用一个静态方法,并且 前后参数的形式一致 ,就可以使用静态方法引用。
1 | //Lambda写法 |
实例方法的引用
- 对象名::实例方法
- 如果某个Lambda表达式里只是调用一个实例方法,并且 前后参数的形式一致 ,就可以使用实例方法引用。
1 | public class CompareByData{ |
特定类型方法的引用
- 类型::方法
- 如果某个Lambda表达式里只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。
1 | String[] names = {"Ab", "bc", "Bd", "aa"}; |
构造器引用
- 类名::new
- 如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使构造器引用。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 宫本贩剑的博客!