Java 包
包就是一个容器,它将相关的类型(Java类、接口、枚举和注解)组合在一起。例如,在核心 Java 中,ResultSet
接口属于 java.sql
包。该包包含 SQL 查询和数据库连接所需的所有相关类型。
如果您想在代码中使用 ResultSet
接口,只需导入 java.sql 包(导入包将在本文后面讨论)。
如前所述,包只是 Java 类、接口等的容器。这些包有助于您保留类名称空间并创建可维护的代码。
例如,Java 中有两个 Date
类。但是,Java 编程的一个经验法则是,一个 Java 项目中只允许有一个唯一的类名。
他们是如何做到在 JDK 中包含两个同名 Date 的类的?
这是可能的,因为这两个 Date
类属于两个不同的包。
java.util.Date
- 这是一个普通的 Date 类,可以在任何地方使用。java.sql.Date
- 这是一个 SQL Date,用于 SQL 查询等。
根据包是否由用户定义,包分为两类:
内置包
内置包是与 JDK 一起提供的现有 Java 包。例如,java.lang
、java.util
、java.io
等。例如:
import java.util.ArrayList;
class ArrayListUtilization {
public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>(3);
myList.add(3);
myList.add(2);
myList.add(1);
System.out.println(myList);
}
}
输出:
myList = [3, 2, 1]
ArrayList
类属于 java.util
包。要使用它,我们必须先使用 import
语句导入该包。
import java.util.ArrayList;
用户定义包
Java 还允许您根据需要创建包。这些包称为用户定义包。
如何定义 Java 包?
要在 Java 中定义一个包,您可以使用 package
关键字。
package packageName;
Java 使用文件系统目录来存储包。让我们在另一个目录中创建一个 Java 文件。
例如
└── com └── test └── Test.java
现在,编辑 Test.java 文件,并在文件开头写入包语句,如下所示:
package com.test;
在这里,在 test 目录中声明的任何类都属于 com.test 包。
代码如下:
package com.test; class Test { public static void main(String[] args){ System.out.println("Hello World!"); } }
输出:
Hello World!
在这里,Test 类现在属于 com.test 包。
包命名约定
包名必须是唯一的(类似于域名)。因此,有一个惯例是按照域名的倒序来创建包。例如,com.company.name。
在这里,包的每个级别都是文件系统中的一个目录。就像这样:
└── com └── company └── name
而且,包的子目录(包层次结构)数量没有限制。
如何在 IntelliJ IDEA 中创建包?
在 IntelliJ IDEA 中,您可以按照以下步骤创建包:
- 右键单击源文件夹。
- 转到 New,然后选择 Package。
- 会出现一个弹出框,您可以在其中输入包名。
创建包后,文件系统上也会创建类似的文件夹结构。现在,您可以在包中创建类、接口等。

如何在 Java 中导入包?
Java 有一个 import
语句,它允许您导入整个包(如前面的示例),或者仅使用包中定义的某些类和接口。
import
语句的一般形式是:
import package.name.ClassName; // To import a certain class only import package.name.* // To import the whole package
例如,
import java.util.Date; // imports only Date class import java.io.*; // imports everything inside java.io package
import
语句在 Java 中是可选的。
如果您想使用某个包中的类/接口,也可以使用其完全限定名,它包含完整的包层次结构。
下面是一个使用 import
语句导入包的示例。
import java.util.Date; class MyClass implements Date { // body }
使用完全限定名可以完成相同的任务,如下所示:
class MyClass implements java.util.Date { //body }
示例:包和导入包
假设您已定义了一个名为 com.programiz 的包,其中包含一个名为 Helper 的类。
package com.programiz; public class Helper { public static String getFormattedDollar (double value){ return String.format("$%.2f", value); } }
现在,您可以将 Helper 类从 com.programiz 包导入到您的实现类中。导入后,该类可以直接通过其名称进行引用。方法如下:
import com.programiz.Helper; class UseHelper { public static void main(String[] args) { double value = 99.5; String formattedValue = Helper.getFormattedDollar(value); System.out.println("formattedValue = " + formattedValue); } }
输出:
formattedValue = $99.50
这里,
- Helper 类定义在 com.programiz 包中。
- 该 Helper 类已导入到另一个文件中。该文件包含 UseHelper 类。
- 从 UseHelper 类内部调用了 Helper 类的
getFormattedDollar()
方法。

在 Java 中,import
语句写在包语句(如果存在)之后,类定义之前。
例如,
package package.name; import package.ClassName; // only import a Class class MyClass { // body }