Java 包

包只是一个将相关类型(Java 类、接口、枚举和注释)分组的容器。在本文中,您将了解 Java 包以及如何使用它们在 Java 中创建模块化代码。

在本文中,您将了解 Java 包以及如何使用它们在 Java 中创建模块化代码。

Java 包

包只是一个将相关类型(Java 类、接口、枚举和注释)分组的容器。 例如,在核心 Java 中, ResultSet 接口属于 java.sql 包。 该包包含 SQL 查询和数据库连接所需的所有相关类型。

如果您想在你的代码中使用 ResultSet 接口,只需导入 java.sql 包(导入包将在文章后面讨论)。

如前所述,包只是 Java 类、接口等的容器。 这些包帮助您保留类命名空间并创建可维护的代码。

例如,您可以在 JDK 内置的类型中找到两个 Date 类。 但是,Java 编程的经验法则是,Java 项目中只允许使用一个唯一的类名。

JDK 是如何包含两个相同名称 Date 的类的呢? 因为这两个 Date 类属于两个不同的包:

  • java.util.Date - 这是一个可以在任何地方使用的普通 Date 类。
  • java.sql.Date - 这是用于 SQL 查询的 SQL 日期。

根据包是否由用户定义,包分为两类:

  • 内置包
  • 用户自定义包

内置包

内置包是 JDK 提供的 java 包,例如 java.lang, java.util, java.io 等。例如:

import java.util.ArrayList;

public 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 java.util.ArrayList;

用户自定义包

Java 还允许您根据需要创建包,这些包称为用户定义的包。

如何定义 Java 包?

要在 Java 中定义包,请使用关键字 package .

package package_name;

Java 使用文件系统目录来存储包。 让我们在另一个目录中创建一个 Java 文件。

例如:

└── com
  └── test
    └── Test.java

现在,编辑 Test.java 文件,在文件的开头,将 package 语句写为:

package com.test;

在这里,在 test 目录中声明的任何类都属于 com.test 包。

这是代码:

package com.test;

public class Test {
    public static void main(String[] args){
        System.out.println("Hello World!");
    }
}

输出

Hello World!

使用 package 声明的包,要与类所在的目录结构保持一致。

包命名约定

在一个项目中,包名称必须是唯一的。一个常用的做法是使用企业的域名作为顶级包名,但是域名后缀在前,从大到小, 例如: com.company.name

在这里,包的每一层都是文件系统中的一个目录。 像这样:

└── com
  └── company
    └── name

而且,您可以创建的更深层的子目录,包层次结构的数量没有限制。

如何在 Intellij IDEA 中创建包?

在 IntelliJ IDEA 中,您可以通过以下方式创建包:

  1. 右键单击 src 文件夹。

  2. 转到 New 然后 Package 。

    Intellij IDEA 中的新包

  3. 将出现一个弹出框,您可以在其中输入包名称。

    Java 中的包命名约定

创建包后,也会在您的文件系统上创建类似的文件夹结构。 现在,您可以在包内创建类、接口等。

包目录

如何在 Java 中导入包?

使用 import 语句允许导入整个包,或仅导入包中定义的某些类和接口。

import 语句直接写在 package 语句之后和类定义之前。

例如,

import java.util.Date; // 只导入 Date 类
import java.io.*;      // 导入 java.io 包中的所有类

如果您想使用某个包中的类/接口,import 语句不是必须的,您还可以使用其完全限定名称,其中包括其完整的包层次结构。

这是一个使用 import 导入包的示例:

import java.util.Date;

public class MyClass implements Date {
    // body
}

这是一个使用完全限定名称的示例:

public class MyClass implements java.util.Date {
    //body
}

示例:打包和导入包

假设您定义了一个包 net.gobeta ,其中包含一个 Helper 类。

package net.gobeta;

public class Helper {
    public static String getFormattedDollar (double value){
        return String.format("$%.2f", value);
    }
}

现在,您可以将 net.gobeta 包中的 Helper 类导入到您的实现类中。 导入后,可以直接通过其名称引用该类。 就是这样:

import net.gobeta.Helper;

public 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

说明

  1. Helper 类定义在 net.gobeta 包中。
  2. Helper 类导入 UseHelper 类中,被 UserHelper 类使用。
  3. UseHelper 类调用 Helper 类的 getFormattedDollar() 方法。