目录
匿名内部类的简化
btn.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(win, "点击了按钮!");
}
});
简化后:
btn.addActionListener(e -> JOptionPane.showMessageDialog(win, "点击了按钮!"));
equals与Objects.equals
package day9.demo2;
import java.util.Objects;
/**
* @author NJR10byh
* @date 2022/7/26 13:55:13
* @description equals 与 Object.equals
*/
public class task2 {
public static void main(String[] args) {
String a1 = null;
String a2 = "njr";
// System.out.println(a1.equals(a2));
// Cannot invoke "String.equals(Object)" because "a1" is null
System.out.println(Objects.equals(a1, a2));
// Objects.equals更安全,它会提前先判断比较的值是否为null,再进行比较
}
}
Math类
System类
计算机认为的时间起源:1970-01-01 00:00:00
- System.currentTimeMillis()
从1970-01-01 00:00:00走到现在的毫秒值
BigDecimal类
- 作用:解决浮点型运算精度失真的问题
- 使用构造器方法也会出现精度失真
package day9.demo3;
import java.math.BigDecimal;
/**
* @author NJR10byh
* @date 2022/7/26 15:57:53
* @description BigDecimal
*/
public class task3 {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(0.1);
System.out.println(a);
/** 不建议使用 new BigDecimal(0.1),因为结果为 0.1000000000000000055511151231257827021181583404541015625
* 会导致失真
* 推荐使用BigDecimal.valueOf(0.1)
*/
BigDecimal a1 = BigDecimal.valueOf(0.1);
BigDecimal a2 = BigDecimal.valueOf(0.2);
System.out.println(0.1 + 0.2); // 0.30000000000000004
System.out.println(a1.add(a2)); // 0.3
}
}
日期与时间
Date类
Date类记录时间的两种形式:
- 1、日期对象
- 2、时间毫秒值
package day9.demo4;
import java.util.Date;
/**
* @author NJR10byh
* @date 2022/7/26 16:12:43
* @description Date
*/
public class task4 {
public static void main(String[] args) {
Date d = new Date();
// 形式1:日期对象
System.out.println(d); // Tue Jul 26 16:36:58 CST 2022
// 形式2:时间毫秒值
System.out.println(d.getTime()); // 1658824618395
}
}
SimpleDateFormat 日期格式化
格式化时间为熟悉的格式
format()
- 可以接受 毫秒值 和 时间对象
package day9.demo6;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author NJR10byh
* @date 2022/7/26 17:04:23
* @description SimpleDateFormat 格式化日期
*/
public class task6 {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 1、接受毫秒值
// 格式化当前时间 + 1000秒
long currTime_ms = System.currentTimeMillis();
String currformatTime_ms = sdf.format(currTime_ms);
System.out.println(currformatTime_ms);
String formatTime_ms = sdf.format(currTime_ms + 1000 * 1000);
System.out.println(formatTime_ms);
System.out.println("-------------------");
// 2、接受时间对象
Date currTime_date = new Date();
String currformatTime_date = sdf.format(currTime_date);
System.out.println(currformatTime_date);
}
}
将熟悉的格式转换为日期对象
parse()
注:需要抛出异常
package day9.demo7;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author NJR10byh
* @date 2022/7/26 17:32:18
* @description SimpleDateFormat 熟悉的格式转换为日期对象
*/
public class task7 {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = "2022-07-26 17:32:18";
Date d = sdf.parse(dateStr);
System.out.println(d); // Tue Jul 26 17:32:18 CST 2022
}
}
Calendar类
- 常用方法
JDK8开始新增的日期类
LocalTime / LocalDate / LocalDateTime
Instant时间戳
DateTimeFormatter
Period(日期间隔)
用于 LocalDate 之间的比较
Duration(时间间隔)
用于 LocalDateTime 之间的比较(也可用于 Instant 之间的比较)
ChronoUnit
练习代码: day9_code