首页 > 编程笔记

Java包的定义和使用

包(Package)机制是 Java 中管理类的重要手段。在不同的 Java 源文件中可能会出现名称相同的类,如果用户想区分这些类,就需要使用包名。

使用包名可以有效地区分名称相同的类,当不同源文件中的两个类的名称相同时,可以通过它们隶属于不同的包进行区分。

包对于类,相当于文件夹对于文件的作用。

借助包还可以将自己定义的类与其他类库中的类分开管理。Java 中的基础类库就是使用包管理的,如 java.util 包和 java.sql 包等。

在不同的包中,类的名称可以相同,如 java.util.Date 类和 java.sql.Date 类,这两个类的名称都是 Date,但是分别属于 java.util 包和 java.sql 包,因此能够同时存在。用户可以非常方便地通过“包路径.类名”的方式来访问类或接口。

包的定义

Java 中使用 package 语句定义包。

package 语句应该放在源文件的第一行,在每个源文件中只能有一条包定义语句。另外,package 语句适用于所有类型(类、接口、枚举和注释)的文件。

定义包的语法格式如下:
package 包名1[.包名2[.包名3...]];
包名 1 ~ 包名 3 都是组成包名的一部分,并且用“.”连接。包名应该是合法的标识符,并且遵守 Java 包的命名规范,即所有字母都是小写的。

注意,Java 中不允许用户程序使用“java”作为包名的第一部分。

如果在源文件中没有定义包,那么类、接口、枚举和注释类型将被放在无名包[也称为默认包(Default Package)]中。

一般先采用倒序域名来定义包结构,再将所有的类和接口分类存放在指定的包中,如 package cn.edu.yjy;。包定义的结构和编译后生成的文件夹结构是一一对应的。

【实例】包的应用。
//包名为chapter3,对应的文件夹存储在当前项目的 src/main/java文件夹下
package chapter3;

public class Test {
    public static void main(String[] args) {
        System.out.println("hello world!");
    }
}
定义好包之后,包采用层次结构管理类、接口、枚举和注释类型,如下图所示,在 IDEA 软件包资源视图中查看包。


图 1 在IDEA软件包资源视图中查看包

包的引入

Java 中的一个类可以访问其所在包中其他所有的类,如果需要访问其他包中的类,那么可以使用 import 语句引入包。引入包的操作通常也称为导包操作。

在 Java 中,引入包的语法格式如下:
import 包名1[.包名2[.包名3]...].类型名|*;
“包名.类型名”形式只引入具体类型,“包名.*”采用通配符,表示引入这个包中所有的类型。但从编程规范性上来说,提倡明确引入类型名,即采用“包名.类型名”形式,这样可以提高程序的可读性。

import 语句必须放在所有类定义之前,用来引入指定包的类或接口。

Java 编译器默认为所有的 Java 程序引入 Java.lang 包中所有的类,因此,用户可以直接使用 java.lang 包中的类而不必显式引入。

如果引入两个名称相同的类,那么只能用包名+类名来显式调用相关类,例如:
Java.util.Date date = new java.util.Date();

【实例】引入名称相同的类的处理。
package chapter3;

import java.sql.Date; // 导入java.sql包中的Date类
import java.util.Date; // 导入java.util包中的Date类

public class Test {
    public static void main(String[] args) {
        // 使用java.sql包中的Date类创建对象now1
        Date now1;
       
        // 使用java.util包中的Date类创建对象now2
        java.util.Date now2 = new java.util.Date();
       
        // 打印now2对象的值
        System.out.println(now2);
    }
}
运行结果为:

Tue Apr 18 12:34:56 UTC 2024

常用的包

Java 提供了 130 多个包,Java 的核心类都放在 java 包及其子包下,Java 扩展的许多类都放在 javax 包及其子包下。这些实用类也就是常说的 API,按照这些类的功能分别放在不同的包下。

下面几个包是 Java 中的常用包,在后续章节中会经常用到这些包中的类。

1) java.lang包

java.lang 包中包含 Java 的核心类,如 Object、Class、String、包装类和 Math 等,以及包装类 Boolean、Character、Integer、Long、Float 和 Double。

使用 java.lang 包中的类不需要显式使用 import 语句引入,而是由解释器自动引入的。

2) java.util包

java.util 包中包含一些实用工具类和接口,如集合、日期,以及与日历相关的类和接口。

3) java.io包

java.io 包中包含输入/输出类,如 InputStream、OutputStream、Reader 和 Writer,以及文件管理相关的类和接口,如 File 类、FileDescriptor 类及 FileFilter 接口。

推荐阅读