1. java.lang.Object 类
1.1、Object类是什么?
Object 类是 Java 中所有类的超类(根类)。每个类都直接或间接地继承自 Object。因此,理解 Object 类的方法至关重要。
1.2、主要方法介绍
1.2.1 toString()
- 作用:返回对象的字符串表示。默认实现是 类名@哈希码的无符号十六进制表示(例如 java.lang.Object@1b6d3586)。
- 为什么重要:当使用 System.out.println(object) 打印对象,或进行字符串拼接时,会自动调用此方法。
- 最佳实践:强烈建议在自定义类中重写此方法,以返回一个清晰、有意义的描述性字符串。
public class Person {
private String name;
private int age;
// ... 构造方法和其他代码 ...
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + '}';
}
}
// 使用
Person person = new Person("Alice", 25);
System.out.println(person); // 输出: Person{name='Alice', age=25}
1.2.2 equals(Object obj)
- 作用:判断两个对象是否“逻辑上相等”。默认实现是 == ,即比较两个对象的内存地址是否相同。
- 为什么重要:我们通常关心的是对象的内容是否相等,而不是它们是否是同一个对象。
- 最佳实践:通常需要和 hashCode() 方法一起重写。重写 equals 时,必须遵循自反性、对称性、传递性、一致性等契约。
@Override
public boolean equals(Object obj) {
// 1. 检查是否是同一个对象
if (this == obj) return true;
// 2. 检查是否为null或类是否不同
if (obj == null || getClass() != obj.getClass()) return false;
// 3. 类型转换
Person person = (Person) obj;
// 4. 比较关键字段
return age == person.age && Objects.equals(name, person.name);
}
1.2.3 hashCode()
- 作用:返回对象的 哈希码值,主要用于哈希表(如 HashMap, HashSet)中。
- 重要规则:如果两个对象根据 equals() 方法是相等的,那么它们必须具有相同的哈希码。反之则不一定。
- 最佳实践:重写 equals() 时,必须重写 hashCode(),使用相同的字段来计算哈希码。
@Override
public int hashCode() {
return Objects.hash(name, age); // 使用Java自带的工具方法
}
1.2.4 getClass()
- 作用:返回此对象的运行时类(Class 对象)。常用于反射机制。
1.2.5 clone()
- 作用:创建并返回此对象的一个副本。要实现克隆,类必须实现 Cloneable 接口。
2. java.lang.String 类
2.1、String类是什么?
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc")都是此类的实例。String 对象是不可变的(Immutable),一旦创建,其值就不能被改变。
2.2、主要特性介绍
2.2.1 不可变性
- 任何对字符串的修改操作(如拼接、替换)都会 返回一个新的 String 对象,原对象不变。
- 优点:线程安全,可以缓存哈希值,易于共享。
2.2.2 字符串常量池
- JVM 为了减少重复字符串的创建,维护了一个特殊的内存区域—— 字符串常量池。
- 使用字面量(String s1 = "hello";)方式创建字符串时,会先检查池中是否存在,存在则直接返回引用。
- 使用 new 关键字(String s2 = new String("hello");)会强制在 堆 中创建一个新对象。
2.3、常用方法
2.3.1 长度和判空
- int length():返回长度。
- boolean isEmpty():判断是否为空字符串。
2.3.2 查找和比较
- boolean equals (Object anObject):比较内容是否相等。
- boolean equalsIgnoreCase (String anotherString):忽略大小写比较。
- boolean contains (CharSequence s):是否包含某个字符序列。
- int indexOf (int ch) / lastIndexOf (int ch):查找字符或字符串的位置。
2.3.3 截取和分割
- String substring(int beginIndex) / substring(int beginIndex, int endIndex):截取子串。
- String[] split(String regex):根据正则表达式分割字符串。
2.3.4 替换和去除空格
- String replace(char oldChar, char newChar):替换字符。
- String replaceAll(String regex, String replacement):正则替换。
- String trim():去除首尾空白符。 (JDK 11+ 推荐使用 strip())
2.3.5 大小写转换
- String toLowerCase() / toUpperCase()
注意
由于不可变性,在需要频繁修改字符串的场景(如循环拼接),使用 String 会导致大量临时对象,性能低下。此时应使用 StringBuilder(非线程安全)或 StringBuffer(线程安全)。
3. java.lang.Math 类
3.1 Math类是什么?
Math 类包含用于执行基本数学运算的方法,如指数、对数、平方根和三角函数。它是一个工具类,构造器是 private 的,所有方法都是 static 的,可以直接通过类名调用。
3.2、常用方法
3.2.1 基本运算
- Math.abs(int/long/float/double a):绝对值
- Math.max(a, b) / Math.min(a, b):最大值/最小值
3.2.2 舍入运算
- Math.ceil(double a):向上取整
- Math.floor(double a):向下取整
- Math.round(float/double a):四舍五入
3.2.3 指数和对数
- Math.pow(double a, double b):返回 a 的 b 次幂
- Math.sqrt(double a):平方根
- Math.log(double a):自然对数
3.2.4 三角函数
- Math.sin/cos/tan(double a):正弦/余弦/正切
3.2.5 随机数
- Math.random():返回 [0.0, 1.0) 之间的随机 double 值。 (更灵活的随机数生成推荐使用 java.util.Random 类)
(1)生成0到n的随机数,即 [0.0, 1.0)
// 比如0到10 假如n=11
// 0x10=0.0 10x1.0=10.0
// 左闭又开,所以取不到右边的数 即1x11=11(取不到)
int num=(int)(Math.random()*(n+1);
(2)生成a到b的随机数,即 [a, b]
// 设 a=10, b=20
// Math.random() 属于 【0,1)
// (b-a+1) = 20-10+1=11 . 乘于【0,1) 即 11x 【0,1)= 【0,11)
// a + 【0,11) = 10。 10 + 【0,11) = [10,21) ->取整数 = [10,20】
int num= a+ (int)(Math.random()*(b-a+1));
4. java.util.Date 类与新的日期时间 API
4.1. 传统的 java.util.Date (已过时,不推荐在新代码中使用)
-
Date类表示特定的瞬间,精确到毫秒。 -
问题:
-
设计缺陷:年份从1900年开始算起,月份从0开始。
-
可变性:
Date对象是可变的,不利于并发安全。 -
格式化:
DateFormat和SimpleDateFormat是非线程安全的。
-
4.2. Java 8 引入的新日期时间 API (java.time 包) (强烈推荐)
Java 8 引入了全新的日期时间 API,位于 java.time 包下,核心类有:
-
LocalDate:只包含日期,例如2023-10-27。 -
LocalTime:只包含时间,例如15:30:00。 -
LocalDateTime:包含日期和时间,例如2023-10-27T15:30:00。 -
Instant:时间戳,用于机器时间。 -
DateTimeFormatter:用于日期时间的格式化和解析,是线程安全的。
public class DateDemo {
public static void test() {
// 获取当前日期和时间
LocalDate today = LocalDate.now();
LocalTime now = LocalTime.now();
LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println(today);
System.out.println(now);
System.out.println(currentDateTime);
// 创建特定日期
LocalDate birthday = LocalDate.of(1990, Month.OCTOBER, 27);
System.out.println(birthday);
// 日期运算(非常方便!)
LocalDate nextWeek = today.plusWeeks(1);
LocalDate firstDayOfMonth = today.withDayOfMonth(1);
System.out.println(nextWeek);
System.out.println(firstDayOfMonth);
// 日期比较
boolean isAfter = birthday.isAfter(today);
System.out.println(isAfter);
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatted = currentDateTime.format(formatter); // "2023-10-27 14:30:00"
System.out.println(formatted);
// 解析
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-10-27 14:30:00", formatter);
System.out.println(parsedDateTime);
}
public static void main(String[] args) {
DateDemo.test();
}
}
5、总结
| 类/包 | 核心用途 | 关键点 |
|---|---|---|
Object | 所有类的根父类 | 掌握 toString, equals, hashCode 的用法和重写规则。 |
String | 表示不可变的字符序列 | 理解不可变性、常量池;熟练掌握其丰富的 API。 |
Math | 提供静态数学工具方法 | 直接通过类名调用,用于常规数学计算和随机数。 |
java.time | 处理日期和时间 (Java 8+) | 替代老旧的 Date/Calendar,API 清晰、强大且线程安全。 |
对于新项目,请务必使用 java.time API 来代替 java.util.Date 和 java.util.Calendar。
纯个人笔记,仅供参考,不保证内容完全准确性。如有疏漏,欢迎指正。
540

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



