Java基础API
# Java 基础 API
# 1. Object 类
Object
类是 Java 中所有类的祖先类,所有 Java 类都直接或间接继承自 Object
。因此,Object
类的方法适用于所有类。
# 1.1 常用方法
方法 | 描述 | 参数说明 | 返回值说明 |
---|---|---|---|
boolean equals(Object obj) | 判断两个对象是否相等,通常需要重写以进行内容比较 | obj :要比较的对象 | true 表示相等,false 表示不等 |
int hashCode() | 生成对象的哈希码,通常需要与 equals 方法一致性重写 | 无 | 返回对象的哈希码 |
String toString() | 返回对象的字符串描述,常用于调试和日志记录 | 无 | 返回对象的字符串表示 |
final native Class<?> getClass() | 返回对象的类类型,用于反射操作 | 无 | 返回对象的 Class 对象 |
native Object clone() | 创建对象的浅拷贝,需实现 Cloneable 接口 | 无 | 返回对象的副本 |
final void notify() | 唤醒在此对象监视器上等待的一个线程 | 无 | 无返回值 |
final void notifyAll() | 唤醒在此对象监视器上等待的所有线程 | 无 | 无返回值 |
final void wait(long timeout) | 使线程在对象监视器上等待指定时间 | timeout :等待时间(毫秒) | 无返回值 |
void finalize() | 对象被垃圾回收前调用,通常用于资源释放 | 无 | 无返回值 |
# 1.2 使用场景
- equals(Object obj):用于对象内容比较。通常重写此方法以根据对象的内容而不是引用进行比较。例如,两个自定义类实例的内容相同时,可以通过重写
equals
方法来判断它们相等。 - hashCode():与
equals
方法一起重写,主要用于集合类中,如HashMap
和HashSet
。 - toString():用于返回对象的字符串描述,通常重写此方法以输出对象的关键信息,便于调试和日志记录。
- getClass():用于获取对象的类类型,在反射操作中非常常见。
- clone():创建对象的副本,但要求类实现
Cloneable
接口,通常推荐使用拷贝构造函数替代clone
。
public class ObjectMethodsDemo {
public static void main(String[] args) {
// 示例:重写 equals 方法进行内容比较
Student s1 = new Student("Alice", 20);
Student s2 = new Student("Alice", 20);
System.out.println("两个学生是否相等: " + s1.equals(s2)); // 输出 true,因为内容相同
// 示例:使用 toString 方法获取对象的字符串描述
System.out.println(s1); // 如果未重写 toString,默认输出对象地址
// 示例:使用 getClass 获取对象类型
System.out.println("对象类型: " + s1.getClass().getName()); // 输出 Student 类的全限定名
}
}
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 重写 equals 方法,进行基于内容的比较
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Student student = (Student) obj;
return age == student.age && name.equals(student.name);
}
// 重写 toString 方法,返回对象的详细信息
@Override
public String toString() {
return "Student{name='" + name + "', age=" + age + "}";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
场景说明:例如,在项目中,经常需要比较对象的内容是否相同,或者在调试时查看对象的详细信息。通过重写 equals
和 toString
方法,可以大大提高代码的可读性和调试效率。
# 2. Random 类
Random
类用于生成伪随机数,常用于游戏开发、数据加密、抽奖模拟等场景。
# 2.1 常用方法
方法 | 描述 | 参数说明 | 返回值说明 |
---|---|---|---|
int nextInt(int bound) | 生成 0 到 bound-1 之间的随机整数 | bound :随机数的上限(不含) | 返回随机整数 |
double nextDouble() | 生成一个 0.0 到 1.0 之间的随机小数 | 无 | 返回随机小数 |
boolean nextBoolean() | 生成一个随机布尔值 | 无 | 返回 true 或 false |
long nextLong() | 生成一个随机长整数 | 无 | 返回随机长整数 |
float nextFloat() | 生成一个 0.0 到 1.0 之间的随机浮点数 | 无 | 返回随机浮点数 |
# 2.2 使用场景
- nextInt(int bound):生成指定范围内的随机整数,适用于生成游戏中的随机位置、抽奖系统的中奖号码等场景。
- nextDouble() 和 nextFloat():用于生成概率值或模拟浮动范围的数据,如概率事件、股票涨跌模拟等。
- nextBoolean():可用于模拟随机选择,如抛硬币、随机决定某事件是否发生。
import java.util.Random;
public class RandomDemo {
public static void main(String[] args) {
// 创建 Random 对象
Random random = new Random();
// 生成 0 到 9 之间的随机整数
int randomInt = random.nextInt(10);
System.out.println("随机整数:" + randomInt);
// 生成 0.0 到 1.0 之间的随机小数
double randomDouble = random.nextDouble();
System.out.println("随机小数:" + randomDouble);
// 生成一个随机布尔值
boolean randomBoolean = random.nextBoolean();
System.out.println("随机布尔值:" + randomBoolean);
// 生成一个随机长整数
long randomLong = random.nextLong();
System.out.println("随机长整数:" + randomLong);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
场景说明:Random
类广泛应用于游戏开发、模拟实验和随机抽奖等场景。例如,随机生成道具位置、模拟随机事件的发生等。
# 3. Math 类
Math
类提供了一系列静态方法用于数学运算,所有方法均为静态方法,无需实例化即可使用。
# 3.1 常用方法
方法 | 描述 | 参数说明 | 返回值说明 |
---|---|---|---|
public static int abs(int a) | 返回参数 a 的绝对值 | a :整数或浮点数 | 返回绝对值 |
public static double ceil(double a) | 返回大于等于 a 的最小整数(向上取整) | a :浮点数 | 返回取整后的值(类型为 double ) |
public static double floor(double a) | 返回小于等于 a 的最大整数(向下取整) | a :浮点数 | 返回取整后的值(类型为 double ) |
public static double pow(double a, double b) | 计算 a 的 b 次幂 | a :底数,b :指数 | 返回结果(类型为 double ) |
public static long round(double a) | 返回最接近 a 的整数(四舍五入) | a :浮点数 | 返回取整后的结果(类型为 long ) |
public static double random() | 返回 [0.0, 1.0) 之间的随机数 | 无 | 返回值为 double 的随机数 |
# 3.2 使用场景
abs(int a):计算绝对值,常见于金融计算和科学计算,例如处理损失值或偏差值。
ceil(double a) 和 floor(double a):用于向上或向下取整,如在分配资源时保证整数数量。
pow(double a, double b):用于计算幂值,适用于科学计算、图形学和加密算法。
random():生成随机数,适用于概率计算、模拟实验等。
public class MathDemo {
public static void main(String[] args) {
// 1. 取绝对值
System.out.println("绝对值:" + Math.abs(-10)); // 输出 10
// 2. 向上取整
System.out.println("向上取整:" + Math.ceil(4.3)); // 输出 5.0
// 3. 向下取整
System.out.println("向下取整:" + Math.floor(4.7)); // 输出 4.0
// 4. 求指数次方
System.out.println("2^3 = " + Math.pow(2, 3)); // 输出 8.0
// 5. 四舍五入
System.out.println("四舍五入:" + Math.round(4.6)); // 输出 5
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
场景说明:Math
类在金融、科学计算、数据分析等领域中非常重要。例如,在计算价格时需要对金额进行取整和四舍五入操作。
# 4. System 类
System
类提供了与系统相关的工具方法,如标准输入输出流、时间测量、数组复制等。所有方法均为静态方法。
# 4.1 常用方法
方法 | 描述 | 参数说明 | 返回值说明 |
---|---|---|---|
public static void exit(int status) | 终止当前正在运行的 JVM,status 表示退出状态码 | status :状态码,0 表示正常退出,非 0 表示异常退出 | 无返回值 |
public static void gc() | 提醒 JVM 运行垃圾回收器 | 无 | 无返回值 |
public static long currentTimeMillis() | 返回当前时间的毫秒数,通常用于性能测量 | 无 | 返回当前时间的毫秒值 |
public static long nanoTime() | 返回当前时间的纳秒数,适用于高精度计时 | 无 | 返回当前时间的纳秒值 |
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) | 将数组中的指定元素复制到目标数组的指定位置 | src :源数组,srcPos :源数组起始位置,dest :目标数组,destPos :目标数组起始位置,length :复制的元素数量 | 无返回值 |
# 4.2 使用场景
- currentTimeMillis() 和 nanoTime():用于性能测量、计时任务和程序调试。
- arraycopy:用于高效地复制数组内容,适合在大数据处理中批量操作,如排序中的元素移动。
- exit(int status):用于提前退出程序,常用于异常处理或结束批处理任务。
public class SystemDemo {
public static void main(String[] args) {
// 1. 获取当前时间的毫秒数,通常用于测量程序运行时间
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) { /* 模拟耗时操作 */ }
long endTime = System.currentTimeMillis();
System.out.println("程序运行时间:" + (endTime - startTime) + " 毫秒");
// 2. 使用 arraycopy 方法复制数组
int[] src = {1, 2, 3, 4, 5};
int[] dest = new int[5];
System.arraycopy(src, 0, dest, 0, src.length);
System.out.println("复制后的数组:" + java.util.Arrays.toString(dest));
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
场景说明:System
类在性能测量、数组操作、系统退出等场景中非常重要,尤其是在大数据处理和定时任务中应用广泛。
# 5. Scanner 类
Scanner
类用于从各种输入源(如控制台、文件、字符串)中解析和读取数据。它在命令行工具、用户交互程序中非常实用。
# 5.1 常用方法
方法 | 描述 | 参数说明 | 返回值说明 |
---|---|---|---|
int nextInt() | 从输入中读取一个整数 | 无 | 返回读取到的整数 |
String next() | 读取一个单词(以空格、Tab 或换行符作为分隔符) | 无 | 返回读取到的单词 |
String nextLine() | 读取整行输入 | 无 | 返回读取到的整行文本 |
boolean hasNext() | 判断是否有下一个可读取的标记 | 无 | 如果有下一个标记返回 true ,否则返回 false |
boolean hasNextLine() | 判断是否有下一行输入 | 无 | 如果有下一行输入返回 true ,否则返回 false |
# 5.2 使用场景
- nextInt() 和 nextLine():常用于命令行程序处理用户输入、配置文件读取、CSV 数据解析等。
- hasNext() 和 hasNextLine():用于判断输入源中是否有未读取的数据,适用于循环读取大量输入数据的场景。
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // 创建 Scanner 对象,用于从控制台读取数据
// 读取整数
System.out.print("请输入一个整数: ");
int number = scanner.nextInt();
System.out.println("你输入的整数是: " + number);
// 读取字符串
System.out.print("请输入一个单词: ");
String word = scanner.next();
System.out.println("你输入的单词是: " + word);
// 读取整行输入
scanner.nextLine(); // 处理换行符
System.out.print("请输入一行文字: ");
String line = scanner.nextLine();
System.out.println("你输入的内容是: " + line);
scanner.close(); // 关闭 Scanner 对象
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
场景说明:Scanner
类常用于处理用户输入、命令行参数解析、配置文件读取等场景,尤其在交互式应用中表现优异。