Java包的创建和使用(新手必看)
当一个大型程序交由多个不同的程序开发人员进行开发时,用到相同的类名是很有可能的。当声明的类很多时,类名冲突的几率会大增,为了解决这个问题,Java 引入了包机制来管理类。这类似于使用操作系统通过文件夹管理各类的文件,针对不用的文件分门别类地存放。
包是 Java 提供的一种解决类、接口、注释、枚举等命名冲突的机制,可以说包提供了一种命名机制和可见性限制机制。包在物理上就是一个文件夹,逻辑上代表一个分类概念。
包的作用如下:
定义包的语法格式如下:
注意,如果在源文件中没有定义包,那么类、接口、枚举和注释类型文件将会被放进一个无名的包中,也称为默认包。在实际企业开发中,通常不会把类定义在默认包下。
在 IDEA 上创建包,可在项目下的 src 目录上单击鼠标右键,在弹出的快捷菜单中选择 New->Package 命令,如下图所示:

图 1 新建包
然后输入相应的包名即可,本处输入的是“com.aaa”,如下图所示:

图 2 输入包名
确定回车,会在 IDEA 的项目中生成 com.aaa 包。
为了简化编程,Java 引入了 import 关键字,使用它可以向某个 Java 文件中导入指定包层次下的某个类或全部类。
import 语句位于 package 语句之后,类定义之前。一个 Java 源文件只能包含一个 package 语句,但可以包含多个 import 语句。
使用 import 导入包中某个类的语法格式如下:
Java 编译器自动隐式导入 java.lang 包,无须使用 import 语句,前面在 Java 程序中使用的 String 类、System 类都是其中的类,但是要使用其他包中的类,就必须使用 import 语句导入。
在一些特殊的情况下,import 语句也会失效,此时只能在源文件中使用类全名。例如,需要在程序中使用 java.sql 包下的类,也需要使用 java.util 包下的类,则可以使用如下两行 import 语句:
在这种情况下,如果需要指定包下的 Date 类,则只能使用该类的全名,代码如下:
包是 Java 提供的一种解决类、接口、注释、枚举等命名冲突的机制,可以说包提供了一种命名机制和可见性限制机制。包在物理上就是一个文件夹,逻辑上代表一个分类概念。
包的作用如下:
- 区分相同名称的类、接口、枚举、注释等;
- 把功能相似或相关的类、接口组织在同一个包中,方便类的查找和使用;
- 增加对类、接口等的访问权限。
Java包的创建
Java 使用 package 关键字来创建包,package 语句应该放在源文件的第 1 行,在每个源文件中只能有一个包定义语句。定义包的语法格式如下:
package 包名1[.包名2[.包名3…]];包的命名规范如下:
- 包名全部由小写字母(多个单词也全部小写)组成;
- 如果包名包含多个层次,层次之间用“.”进行分割;
- 包名一般由倒置的域名开头,如 com.aaa,不要有 www;
- 自定义包不能以 java 开头。
注意,如果在源文件中没有定义包,那么类、接口、枚举和注释类型文件将会被放进一个无名的包中,也称为默认包。在实际企业开发中,通常不会把类定义在默认包下。
在 IDEA 上创建包,可在项目下的 src 目录上单击鼠标右键,在弹出的快捷菜单中选择 New->Package 命令,如下图所示:

图 1 新建包
然后输入相应的包名即可,本处输入的是“com.aaa”,如下图所示:

图 2 输入包名
确定回车,会在 IDEA 的项目中生成 com.aaa 包。
Java导入包
如果使用不同包中的其他类,需要使用该类的全名(包名.类名),代码如下:com.aaa.Dog wangcai = new com.aaa.Dog();其中,com.aaa 是包名,Dog 是包中的类名,wangcai 是类的对象。
为了简化编程,Java 引入了 import 关键字,使用它可以向某个 Java 文件中导入指定包层次下的某个类或全部类。
import 语句位于 package 语句之后,类定义之前。一个 Java 源文件只能包含一个 package 语句,但可以包含多个 import 语句。
使用 import 导入包中某个类的语法格式如下:
import 包名1[[.包名2[.包名3…]]].类型名|*;
- 类型名格式表示导入的具体类型名;
- “*”表示导入的是这个包下所有的类型。
Java 编译器自动隐式导入 java.lang 包,无须使用 import 语句,前面在 Java 程序中使用的 String 类、System 类都是其中的类,但是要使用其他包中的类,就必须使用 import 语句导入。
通过使用 import 语句可以简化编程,但 import 语句并不是必需的,如果在类里使用其他类的全名,可以不使用 import 语句。注意,使用星号(*)可能会增加编译时间,特别是引入多个大包时,所以明确地导入具体的类型是一个好方法。
在一些特殊的情况下,import 语句也会失效,此时只能在源文件中使用类全名。例如,需要在程序中使用 java.sql 包下的类,也需要使用 java.util 包下的类,则可以使用如下两行 import 语句:
import java.util.*; import java.sql.*;接下来在 XXX.java 程序中需要使用 Date 类,则会引起如下编译错误:
XXX.java:25:对Date的引用不明确
java.sql中的类java.sql.Date和java.util中的类java.util.Date都匹配
在这种情况下,如果需要指定包下的 Date 类,则只能使用该类的全名,代码如下:
// 为了让引用更加明确,即使使用了import语句,也还是需要使用类的全名 java.sql.Date d = new java.sql.Date()
Java常用的包
Java 提供了一些系统包,其中包含了 Java 开发中常用的基础类,常用的系统包如下表所示。包 | 说明 |
---|---|
java.lang | Java 的核心类库,包含运行 Java 程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、异常处理和线程类等,系统默认加载这个包 |
java.io | Java 语言的标准输入/输出类库,包含基本输入/输出流、文件输入/输出、过滤输入/输出流等 |
java.util | 包含如处理时间的 Date 类,处理动态数组的 Vector 类,以及 Stack 和 HashTable 类 |
java.awt | 构建图形用户界面(GUI)的类库,包含低级绘图操作 Graphics 类、图形界面组件和布局管理(如 Checkbox 类、Container 类、LayoutManager 接口等)以及用户界面交互控制和事件响应(如 Event 类)等 |
java.net | 实现网络功能的类库,包含 Socket 类、ServerSocket 类等 |
java.lang.reflect | 提供用于反射对象的工具 |
java.util.zip | 实现文件压缩功能 |
java.sql | 实现 JDBC 的类库 |
java.rmi | 提供远程连接与载入的支持 |
java.security | 提供安全性方面的有关支持 |
javax.swing | 提供了 Java 图形用户界面开发所需要的各种类和接口。javax.swing 提供了一些高级组件 |