Skip to content

05-常用 API(基础篇)

对应原始资料:day06-常用APIday07-常用API

一、Math

java.lang.Math,工具方法全是 static

java
Math.abs(-5);      // 5
Math.ceil(3.1);    // 4.0  向上取整
Math.floor(3.9);   // 3.0  向下取整
Math.round(3.5);   // 4    四舍五入
Math.max(3, 5);    // 5
Math.min(3, 5);    // 3
Math.pow(2, 10);   // 1024.0
Math.random();     // [0.0, 1.0)

获取 1~n 的随机整数:(int)(Math.random() * n) + 1

二、System

java
System.currentTimeMillis();    // 当前时间毫秒数,常用于计时
System.exit(0);                // 退出 JVM
System.arraycopy(src, 2, dest, 0, 3);  // 数组拷贝

三、Object 类

所有类的根类。

方法说明
toString()返回对象的字符串表示,建议重写为"对象的字段值"
equals(Object)比较是否相等,默认比较地址,建议重写为"比较字段值"
getClass()返回运行时类对象
java
// 重写 equals 示例(IDEA 可自动生成)
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student s = (Student) o;
    return age == s.age && Objects.equals(name, s.name);
}

四、Objects(JDK 7+)

java.util.Objects 工具类,空指针安全

java
Objects.equals(a, b);   // a 为 null 也不报错
Objects.isNull(a);
Objects.nonNull(a);

五、BigDecimal(精确计算)

解决 double / float 精度丢失问题(金额计算必用)。

java
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");

b1.add(b2);         // 0.3   加
b1.subtract(b2);    // 减
b1.multiply(b2);    // 乘
b1.divide(b2);      // 除
b1.divide(b2, 2, RoundingMode.HALF_UP);  // 除不尽必须指定精度,否则抛异常

重点:用 String 构造方法创建 BigDecimal 才精确。

六、包装类

每种基本类型对应一个包装类(int→Integerchar→Character,其余首字母大写)。

1. 自动装箱/拆箱(JDK 5+)

java
Integer i = 10;   // 自动装箱  Integer.valueOf(10)
int a = i;        // 自动拆箱  i.intValue()

2. 基本类型与字符串互转

java
// 基本类型 → String
String s1 = 10 + "";              // "10"
String s2 = String.valueOf(10);

// String → 基本类型
int n = Integer.parseInt("123");
double d = Double.parseDouble("3.14");

3. Integer 缓存陷阱

java
Integer a = 127, b = 127;
System.out.println(a == b);   // true  (-128~127 缓存)
Integer c = 128, d = 128;
System.out.println(c == d);   // false 超出缓存范围
// 比较包装类一律用 equals()

七、String 类(重点)

java.lang.String不可变字符串(final 修饰),底层是 final byte[]

1. 创建

java
String s1 = "abc";                       // 字符串常量池
String s2 = new String("abc");           // 堆中新对象
String s3 = new String(byte[]);          // 字节数组
String s4 = new String(char[]);          // 字符数组

2. == 与 equals

  • == 比较地址,equals 比较内容。
  • 字面量方式创建的字符串在常量池中,相同字面量共享。

3. 常用方法

java
s.length()                     // 长度
s.charAt(i)                    // 第 i 个字符
s.indexOf("ab")                // 子串首次出现索引,找不到返回 -1
s.substring(2)                 // 从索引 2 到结尾
s.substring(2, 5)              // [2, 5)
s.toUpperCase() / s.toLowerCase()
s.replace("a", "A")            // 替换
s.trim()                       // 去两端空格
s.split(",")                   // 按分隔符切分,返回 String[]
s.toCharArray()                // 转字符数组
s.getBytes()                   // 转字节数组
s.concat("def")                // 拼接
s.compareTo("abc")             // 按字典序比较

4. StringBuilder(可变字符串)

  • String 拼接大量字符串效率低(每次新建对象)。
  • StringBuilder可变的字符序列,提升拼接效率。
java
StringBuilder sb = new StringBuilder();
sb.append("hello").append(" ").append("world");
sb.reverse();          // 反转
sb.length();
String result = sb.toString();   // 转回 String

字符串拼接原理:JDK 8 中,+ 拼接在底层会被优化为 StringBuilder。但在循环中拼接时,必须手动用 StringBuilder,否则每次循环都会 new 一个。

八、Date 与 SimpleDateFormat(基础用法)

java
Date d = new Date();                 // 当前时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = sdf.format(d);            // 格式化
Date d2 = sdf.parse("2024-01-01 12:00:00");  // 解析

进阶模块会介绍 JDK 8 的 LocalDate / LocalDateTime(更现代、线程安全)。

练习建议

  1. Math 实现:猜数字、随机生成验证码。
  2. BigDecimal 完成 0.1 + 0.2,对比 double 的结果。
  3. 统计字符串中字母、数字、空格的个数。
  4. StringBuilder 反转字符串、判断回文。
  5. String.split 解析 CSV 行。