Java进阶——常用类及常用方法详解

        本文将深入探讨 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 引入了新的日期时间类,推荐使用新类替代旧的 DateSimpleDateFormat,因为新类是线程安全的。

// 线程不安全
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. 时间计算

使用 LocalDateTimeDuration 可以方便地进行时间计算。

LocalDateTime orderTime = LocalDateTime.now();
LocalDateTime expireTime = orderTime.plusDays(7);
Duration remain = Duration.between(LocalDateTime.now(), expireTime);
System.out.println("剩余支付时间:" + remain.toHours() + "小时");



三、Math数值处理

在进行数值计算时,尤其是涉及金额计算,要避免使用 doublefloat,推荐使用 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流实战详解 →
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值