首页 > 编程笔记 > Java笔记 阅读:26

Java包的创建和使用(新手必看)

当一个大型程序交由多个不同的程序开发人员进行开发时,用到相同的类名是很有可能的。当声明的类很多时,类名冲突的几率会大增,为了解决这个问题,Java 引入了包机制来管理类。这类似于使用操作系统通过文件夹管理各类的文件,针对不用的文件分门别类地存放。

包是 Java 提供的一种解决类、接口、注释、枚举等命名冲突的机制,可以说包提供了一种命名机制和可见性限制机制。包在物理上就是一个文件夹,逻辑上代表一个分类概念。

包的作用如下:

Java包的创建

Java 使用 package 关键字来创建包,package 语句应该放在源文件的第 1 行,在每个源文件中只能有一个包定义语句。

定义包的语法格式如下:
package 包名1[.包名2[.包名3…]];
包的命名规范如下:
注意,如果在源文件中没有定义包,那么类、接口、枚举和注释类型文件将会被放进一个无名的包中,也称为默认包。在实际企业开发中,通常不会把类定义在默认包下。

在 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都匹配

上面的错误提示:在 XXX.java 文件的第 25 行使用了 Date 类,而 import 语句导入的 java.sql 和 java.util 包下都包含了 Date 类,系统不知道使用哪个包下的 Date 类。

在这种情况下,如果需要指定包下的 Date 类,则只能使用该类的全名,代码如下:
// 为了让引用更加明确,即使使用了import语句,也还是需要使用类的全名
java.sql.Date d = new java.sql.Date()

Java常用的包

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 提供了一些高级组件

相关文章