前面学了 Java 的基础语法,你可能已经在代码示例中见过 import java.util.Scanner 这样的语句了。这篇文章来系统讲讲 Java 的包(package)和导入(import)机制:Java 怎么组织代码,怎么引用标准库里的类,以及多文件项目如何协作。
Java 的包(package)
Java 用包(package)来组织代码,你可以把包理解为"文件夹"。每个 .java 文件的开头可以用 package 声明自己属于哪个包:
// 声明这个文件属于 com.example.utils 包
package com.example.utils;
public class MathUtils {
// ...
}包名和目录结构必须一一对应:package com.example.utils 意味着这个文件必须放在 com/example/utils/ 目录下。
同一个包内的类可以直接互相使用,不需要 import。但要使用其他包的类,就需要 import 了。
不过刷题时基本不需要写 package 声明,因为你的代码都在"默认包"里,直接写 public class Main 就行。理解包的概念,主要是为了知道 import 在做什么。
import 导入
当你要使用其他包里的类时,需要用 import 语句把它引入进来。import 写在 package 声明之后、类定义之前。
有两种写法:
// 精确导入:只导入一个类
import java.util.ArrayList;
import java.util.HashMap;
// 通配符导入:导入包下所有的类
import java.util.*;两种写法的效果一样,通配符 * 只导入当前包的类,不会递归导入子包。刷题时用 import java.util.* 一行搞定最方便。
有一个特殊的包 java.lang,它会被自动导入,不需要你写 import。String、System、Math、Integer、StringBuilder 这些常用类都在 java.lang 里,所以你可以直接用。
刷题常用包一览
下面列出刷题中最常用的 Java 标准库包,让你知道"有哪些东西可以用"。具体的用法和示例会在后续的 常用数据结构 和 算法题常用技巧 章节中详细介绍。
| 包名 | 用途 | 典型类 |
|---|---|---|
java.util | 集合框架 | ArrayList、HashMap、PriorityQueue、Arrays |
java.io | 输入输出 | BufferedReader、InputStreamReader |
java.math | 大数运算 | BigInteger |
java.lang(自动导入) | 基础类 | String、Math、Integer、System |
实际刷题时,大多数情况下一行 import java.util.*; 就够了。需要快速 I/O 时加上 import java.io.*;,需要大数运算时加上 import java.math.*;。
多文件与包结构
在实际项目中,Java 代码会按包组织成多个文件。每个 .java 文件只能有一个 public 类,文件名必须和类名一致。
通过 package 声明自己的包名,通过 import 引入其他包的类,多个文件就能协作起来。
下面是一个完整的多文件示例,Main.java 通过 import 引入自定义包中的工具类:
了解了包和导入之后,下一篇我们来讲 方法与面向对象基础,学完之后你就能理解 Java 代码中的 class、new、this 等关键字了。