本文将深入探讨 Java 常用类的核心知识点以及在日常工作中的使用场景。
本文目录
一、String 类
1. 不可变性
String
类是不可变的,这意味着一旦创建就不能被修改。在进行字符串拼接时,需要注意性能问题。
// 不推荐:会创建多个中间对象
String productName = "iPhone";
productName += " 15 Pro";
// 推荐:高频拼接使用 StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("订单").append(orderId).append("总价:").append(total);
String logMsg = sb.toString();
2. 字符串常量池
Java 中的字符串常量池用于存储字符串字面量,使用 new
关键字创建的字符串对象存储在堆内存中。
String s1 = "手机"; // 常量池
String s2 = new String("手机"); // 堆内存
System.out.println(s1 == s2); // false(地址不同)
3. 比较字符串
在比较字符串时,要避免空指针异常。
推荐使用常量字符串调用
equals
方法。
String input = getUserInput(); // 可能返回null,应使用 "VIP".equals(input)进行操作
二、日期时间常用类
1. Java 8引入
Java 8 引入了新的日期时间类,推荐使用新类替代旧的 Date
和 SimpleDateFormat
,因为新类是线程安全的。
// 线程不安全
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date orderDate = sdf.parse("2023-10-01");
//线程安全
LocalDateTime payTime = LocalDateTime.parse("2023-10-01T15:30");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
2. 时间计算
使用 LocalDateTime
和 Duration
可以方便地进行时间计算。
LocalDateTime orderTime = LocalDateTime.now();
LocalDateTime expireTime = orderTime.plusDays(7);
Duration remain = Duration.between(LocalDateTime.now(), expireTime);
System.out.println("剩余支付时间:" + remain.toHours() + "小时");
三、Math数值处理
在进行数值计算时,尤其是涉及金额计算,要避免使用 double
和 float
,推荐使用 BigDecimal
。
// 浮点精度丢失
double total = 0.1 + 0.2; // 0.30000000000000004
// 金额计算
BigDecimal price1 = new BigDecimal("0.1");
BigDecimal price2 = new BigDecimal("0.2");
BigDecimal sum = price1.add(price2); // 0.3
四、Optional 空值处理
Optional
类可以帮助我们避免空指针异常,提供了链式调用和空值处理的方法。
public String getCity(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("未知地区");
}
// 异常处理
Optional.ofNullable(order)
.orElseThrow(() -> new OrderNotFoundException());
五、异常处理类
使用 try-with-resources
语句可以自动关闭实现了 AutoCloseable
接口的资源。
try (BufferedReader reader = new BufferedReader(new FileReader("orders.csv"))) {
String line;
while ((line = reader.readLine()) != null) {
processOrder(line);
}
}
六、枚举类
枚举类可以用于实现状态机,每个枚举值可以有自己的行为。
public enum OrderStatus {
CREATED("已创建") {
@Override
public boolean canCancel() { return true; }
},
PAID("已支付") {
@Override
public boolean canCancel() { return false; }
};
private final String desc;
OrderStatus(String desc) { this.desc = desc; }
public abstract boolean canCancel();
}
← 上一篇 Java进阶——常用工具类 |
记得点赞、关注、收藏哦!
| 下一篇 Java进阶——IO流实战详解 → |