Java基础6 其他API
DateTime
OtherApiDemo1_DateTime.java
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class OtherApiDemo1_DateTime {
public static void main(String[] args) {
// 目标:掌握java提供的获取时间的方案
// JDK 8之前的方案:Date获取此刻日期时间老项目还有。
Date d = new Date();
System.out.println(d);//Sat Jun 07 18:23:26 CST 2025
// 格式化:SimpleDateFormat简单日期格式化,格式化日期对象成为我们指定的格式。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒 EEE a");//只能是yyyy MM dd HH mm ss EEE a
String result = sdf.format(d);
System.out.println(result);//2025年06月07日 18时23分26秒 星期六 下午
System.out.println(d.getYear() + 1900);//2025
System.out.println("--------------------------------------------------");
// JDK 8之后的方案:LocalDate LocalTime LocalDateTime 获取此刻日期时间 新项目推荐。
// 获取此刻日期时间对象
LocalDateTime ldt = LocalDateTime.now();
System.out.println(ldt);//2025-06-07T18:23:26.622021600
System.out.println(ldt.getYear());//2025
System.out.println(ldt.getMonthValue());//6
System.out.println(ldt.getDayOfMonth());//7
System.out.println(ldt.getDayOfYear());//158
System.out.println(ldt.getDayOfWeek());//SATURDAY
System.out.println(ldt.getDayOfWeek().getValue());//6
// 格式化:DateTimeFormatter
// 1、创建一个格式化对象
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss EEE a");
String result2 = dtf.format(ldt);
System.out.println(result2);//2025/06/07 18:23:26 星期六 下午
}
}
StringBuilder
OtherApiDemo2_StringBuilder.java
public class OtherApiDemo2_StringBuilder {
public static void main(String[] args) {
// 目标:高效拼接字符串。
// +号拼接字符串内容,如果是大量拼接,效率极差!String的对象是不可变变量,每次拼接都会产生新的对象
long startTime = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 100000; i++) {
s += "abc";
}
long endTime = System.currentTimeMillis();
System.out.println("+号拼接字符串耗时:" + (endTime - startTime) + "ms");//1485ms
// 定义字符串可以使用String类型,但是操作字符串建议大家用StringBuilder(性能好)
//StringBuilder 不是线程安全的,注意单线程使用
StringBuilder sb1 = new StringBuilder();
startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
sb1.append("abc");
}
endTime = System.currentTimeMillis();
System.out.println("StringBuilder拼接字符串耗时:" + (endTime - startTime) + "ms");//4ms
//System.out.println(sb1);//StringBuilder对象可以直接打印
String s1 = sb1.toString();
//线程安全的StringBuilder
StringBuilder sb2 = new StringBuilder();
Object lock = new Object(); // 同步锁对象
String s2;
synchronized (lock){
s2 = sb2.append("abc").append("efg").toString();
}
System.out.println(s2);
}
}
res
+号拼接字符串耗时:1485ms
StringBuilder拼接字符串耗时:4ms
abcefg
BigDecimal
OtherApiDemo3_BigDecimal.java
import java.math.BigDecimal;
import java.math.RoundingMode;
public class OtherApiDemo3_BigDecimal {
public static void main(String[] args) {
//// 目标:掌握BigDecimal解决小数运算结果失真问题。
double d1 = 0.1;
double d2 = 0.2;
System.out.println(d1 + d2);//0.30000000000000004
System.out.println(d1 + d2 == 0.3);//false
System.out.println("----------------------------------------------------");
// 如何解决呢?使用BigDecimal
// 1、把小数包装成BigDecimal对象来运算才可以。
// 必须使用 public BigDecimal(string val)字符串构造器才能解决失真问题
BigDecimal bd = new BigDecimal(Double.toString(0.5));
//优化方案,可以直接调用valueOf方法,内部使用的就是public BigDecimal(String val)字符串构造器
BigDecimal a1 = BigDecimal.valueOf(0.1);
BigDecimal b1 = BigDecimal.valueOf(0.2);
BigDecimal c1 = a1.add(b1);
System.out.println(c1);//0.3
double c2 = c1.doubleValue();
System.out.println(c2);//0.3
System.out.println(c1.doubleValue() == 0.3);//true
System.out.println("----------------------------------------------------");
//BigDecimal除法
BigDecimal a3 = new BigDecimal("0.1");
BigDecimal b3 = new BigDecimal("0.3");
//BigDecimal c3 = a3.divide(b3);0.1/0.3除不尽,直接这样会报错
BigDecimal c31 = a3.divide(b3,6,BigDecimal.ROUND_HALF_UP);//保留6位小数,四舍五入//不推荐已过时
BigDecimal c3 = a3.divide(b3, 6, RoundingMode.HALF_UP); // 保留6位小数,四舍五入//使用 RoundingMode 枚举类更加符合现代Java编程规范。
System.out.println(c3);
}
}
res
0.30000000000000004 false ---------------------------------------------------- 0.3 0.3 true ---------------------------------------------------- 0.333333