Java常用API
1. Date类
1.1 概述
java.util.Date是Java早期提供的日期时间处理类,用于表示特定的瞬间,精确到毫秒。但由于其设计存在缺陷(如线程不安全、API设计混乱等),Java 8之后推荐使用java.time包下的新API(如LocalDateTime)替代。
1.2 常用方法
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// 创建当前时间的Date对象
Date now = new Date();
System.out.println("当前时间: " + now); // 输出格式: Wed Aug 20 12:40:00 CST 2025
// 获取自1970年1月1日00:00:00 GMT以来的毫秒数
long timeMillis = now.getTime();
System.out.println("时间戳: " + timeMillis); // 输出类似: 1724124000000
// 比较两个日期
Date anotherDate = new Date(timeMillis - 86400000); // 前一天
boolean isAfter = now.after(anotherDate);
boolean isBefore = now.before(anotherDate);
System.out.println("now在anotherDate之后: " + isAfter); // true
System.out.println("now在anotherDate之前: " + isBefore); // false
}
}
1.3 日期格式化
使用SimpleDateFormat进行日期格式化(注意:该类线程不安全):
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
Date now = new Date();
// 创建格式化对象,指定格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化日期为字符串
String formattedDate = sdf.format(now);
System.out.println("格式化后的日期: " + formattedDate); // 输出: 2025-08-20 12:40:00
try {
// 解析字符串为日期对象
Date parsedDate = sdf.parse("2025-08-20 12:40:00");
System.out.println("解析后的日期: " + parsedDate);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. LocalDateTime类
2.1 概述
java.time.LocalDateTime是Java 8引入的日期时间API,位于java.time包下(称为新时间日期API)。它表示日期和时间,不包含时区信息,是不可变的且线程安全的。相比Date类,它提供了更丰富的功能和更清晰的API。
2.2 常用方法
2.2.1 创建LocalDateTime对象
import java.time.LocalDateTime;
public class LocalDateTimeExample {
public static void main(String[] args) {
// 获取当前日期时间
LocalDateTime now = LocalDateTime.now();
System.out.println("当前日期时间: " + now); // 输出类似: 2025-08-20T12:40:00
// 指定日期时间创建
LocalDateTime specificTime = LocalDateTime.of(2025, 8, 20, 12, 40, 0);
System.out.println("指定日期时间: " + specificTime); // 输出: 2025-08-20T12:40:00
}
}
2.2.2 时间增减操作
import java.time.LocalDateTime;
public class LocalDateTimeModifyExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 增加1年
LocalDateTime nextYear = now.plusYears(1);
// 减少2个月
LocalDateTime minusTwoMonths = now.minusMonths(2);
// 增加3天
LocalDateTime plusThreeDays = now.plusDays(3);
// 减少4小时
LocalDateTime minusFourHours = now.minusHours(4);
System.out.println("当前时间: " + now);
System.out.println("增加1年后: " + nextYear);
System.out.println("减少2个月后: " + minusTwoMonths);
System.out.println("增加3天后: " + plusThreeDays);
System.out.println("减少4小时后: " + minusFourHours);
}
}
2.2.3 获取日期时间字段
import java.time.LocalDateTime;
public class LocalDateTimeGetExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
int year = now.getYear();
int month = now.getMonthValue(); // 1-12
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
System.out.println("年: " + year);
System.out.println("月: " + month);
System.out.println("日: " + day);
System.out.println("时: " + hour);
System.out.println("分: " + minute);
System.out.println("秒: " + second);
}
}
2.2.4 格式化与解析
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeFormatExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
// 创建格式化器
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 格式化
String formattedDateTime = now.format(formatter);
System.out.println("格式化后的日期时间: " + formattedDateTime); // 输出: 2025-08-20 12:40:00
// 解析
LocalDateTime parsedDateTime = LocalDateTime.parse("2025-08-20 12:40:00", formatter);
System.out.println("解析后的日期时间: " + parsedDateTime); // 输出: 2025-08-20T12:40
}
}
2.3 LocalDate与LocalTime
LocalDate仅表示日期(年、月、日),LocalTime仅表示时间(时、分、秒、纳秒),用法与LocalDateTime类似。
import java.time.LocalDate;
import java.time.LocalTime;
public class LocalDateLocalTimeExample {
public static void main(String[] args) {
// LocalDate示例
LocalDate today = LocalDate.now();
System.out.println("当前日期: " + today); // 输出类似: 2025-08-20
// LocalTime示例
LocalTime nowTime = LocalTime.now();
System.out.println("当前时间: " + nowTime); // 输出类似: 12:40:00.123
}
}
3. StringBuilder类
3.1 概述
java.lang.StringBuilder是一个可变的字符序列,用于高效地进行字符串拼接操作。与String类不同,StringBuilder的对象可以被多次修改,而不会创建新的对象,因此在频繁进行字符串拼接时性能更优。
3.2 与String的+号拼接的区别
- String: 不可变对象,每次使用
+号拼接字符串都会创建新的String对象,导致内存开销大,性能差。 - StringBuilder: 可变对象,所有修改操作都是在原对象上进行,不会创建新对象,性能更好,尤其适合频繁拼接的场景。
3.3 常用方法
public class StringBuilderExample {
public static void main(String[] args) {
// 创建StringBuilder对象
StringBuilder sb = new StringBuilder();
// append(): 添加内容到末尾
sb.append("Hello");
sb.append(" ");
sb.append("World");
System.out.println("append后: " + sb.toString()); // 输出: Hello World
// insert(): 在指定位置插入内容
sb.insert(5, ", Java"); // 在索引5处插入", Java"
System.out.println("insert后: " + sb.toString()); // 输出: Hello, Java World
// replace(): 替换指定范围的内容
sb.replace(7, 11, "Python"); // 替换索引7-11的内容为"Python"
System.out.println("replace后: " + sb.toString()); // 输出: Hello, Python World
// delete(): 删除指定范围的内容
sb.delete(5, 7); // 删除索引5-7的内容
System.out.println("delete后: " + sb.toString()); // 输出: Hello Python World
// reverse(): 反转字符串
sb.reverse();
System.out.println("reverse后: " + sb.toString()); // 输出: dlroW nohtyP olleH
// 链式调用
StringBuilder chainSB = new StringBuilder()
.append("Java")
.append(" ")
.append("StringBuilder")
.append(" ")
.append("链式调用");
System.out.println("链式调用结果: " + chainSB.toString()); // 输出: Java StringBuilder 链式调用
}
}
4. BigDecimal类
4.1 概述
java.math.BigDecimal用于高精度的浮点数运算,可以解决double和float类型的浮点数运算时出现的精度丢失问题,特别适合财务计算等对精度要求高的场景。
4.2 构造方法
推荐使用BigDecimal(String val)构造方法,避免使用BigDecimal(double val),因为double类型可能存在精度问题。
import java.math.BigDecimal;
public class BigDecimalConstructorExample {
public static void main(String[] args) {
// 推荐: 使用String构造
BigDecimal bd1 = new BigDecimal("0.1");
// 不推荐: 使用double构造,可能存在精度问题
BigDecimal bd2 = new BigDecimal(0.1);
System.out.println("bd1: " + bd1); // 输出: 0.1
System.out.println("bd2: " + bd2); // 输出: 0.1000000000000000055511151231257827021181583404541015625
}
}
4.3 常用方法
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalExample {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10.5");
BigDecimal b = new BigDecimal("3");
// 加法
BigDecimal sum = a.add(b);
System.out.println("和: " + sum); // 输出: 13.5
// 减法
BigDecimal difference = a.subtract(b);
System.out.println("差: " + difference); // 输出: 7.5
// 乘法
BigDecimal product = a.multiply(b);
System.out.println("积: " + product); // 输出: 31.5
// 除法(设置精度和舍入模式)
BigDecimal quotient = a.divide(b, 2, RoundingMode.HALF_UP); // 保留2位小数,四舍五入
System.out.println("商: " + quotient); // 输出: 3.50
// 设置精度和舍入模式
BigDecimal rounded = a.setScale(0, RoundingMode.HALF_UP); //将10.5变更为保留0位小数(不保留),且四舍五入
System.out.println("四舍五入取整: " + rounded); // 输出: 11
}
}
4.4 注意事项
- 避免使用
double构造BigDecimal,应使用String构造。 - 进行除法运算时,必须指定精度和舍入模式,避免
ArithmeticException。 - 常用的舍入模式:
RoundingMode.HALF_UP(四舍五入)、RoundingMode.DOWN(截断)等。
1074

被折叠的 条评论
为什么被折叠?



