Java 包:如何使用包构建 Java 代码项目

作者 : 慕源网 本文共3260个字,预计阅读时间需要9分钟 发布时间: 2021-09-25 共321人阅读

Java 包:如何使用包构建 Java 代码项目

Java 中的包用于组织您的代码文件并防止命名空间冲突(其中两个类具有相同的名称)。

我们来看一个简单的例子。以下示例假设您使用的是 Windows 平台,但 Java 在 UNIX 上的工作方式大致相同。

   Java 包:一个简单的工作示例

假设我们在一个名为c:work的目录中。

我们将在名为aquarium的包中放置一些代码。该水族馆包本身将成为一个子包caveofprogramming包。

我们将代码放在aquarium的子目录中,该子目录本身位于名为caveofprogramming的目录中。

所以目录结构是这样的:

工作目录:c:work
Java 代码:c:workcaveofprogrammingaquariumFish.java

代码(Fish.java):

package caveofprogramming.aquarium;

public class Fish {
    public static void main(String [] args) {
        System.out.println("hello");
    }
}

请注意,在此文件的顶部,我们有一个声明,说明Fish类位于名为aquarium的包中,包是caveofprogramming的子包。

现在,在c:work 中,我们可以键入以下内容来编译 Fish.java:

 

javac caveofprogrammingaquariumFish.java

现在,我们如何运行这个程序?我们从哪里运行它?

这个问题的神奇答案是:我们可以从任何地方运行它。唯一的问题是我们必须告诉 java 期望在c:work 中找到类。此外,我们必须告诉 java 运行caveofprogramming.aquarium.Fish,为编译的类提供完全限定的名称。

有两种方法可以设置“类路径”,它告诉 java 要在哪些目录中查找类。

    1. 设置 CLASSPATH 环境变量。这是一个以分号分隔的路径列表,java 应该在其中查找类。
    1. 在命令行上将类路径指定为 java(如果您正在使用,则在您的 IDE 中设置它)。

我们将在这里采用第二种方法。从我们喜欢的任何地方,我们输入命令:

C:>java -cp c:work caveofprogramming.aquarium.Fish
hello

如您所见,程序运行。魔法!

请注意,当我们向 javac 提供文件名时,我们指定了实际文件——用普通的斜杠分隔的目录路径和 .java 文件扩展名完成。

但是,一旦类被编译,我们就不再使用目录或文件扩展名来引用编译后的类文件。相反,我们只使用点来形成包“路径”和类的名称,而不是包含它的文件:
caveofprogramming.aquarium.Fish )

简而言之,javac处理文件,而java处理类。

   多个类路径

如果你有几个类路径上的类怎么办?

首先,让我们看看编译一个应用程序,其中一些文件在一个类路径上,而其他文件在另一个类路径上。

我修改了 Fish.java 以使用另一个包中的 Java 类。这个包也是caveofprogramming的一个子包,叫做stuff而不是aquarium(你应该为你自己的包选择更有想象力的名字!)。

我们像这样导入stuff包中的所有类:

import caveofprogramming.stuff.*;

…但我们也可以像这样导入一个特定的类:

import caveofprogramming.stuff.Bubble;

这是完整的代码。

Fish.java:

package caveofprogramming.aquarium;

import caveofprogramming.stuff.*;

public class Fish {
    public static void main(String [] args) {
        Bubble bubble = new Bubble();
        bubble.blow();
    }
}

Bubble.java 看起来像这样:

 

package caveofprogramming.stuff;

public class Bubble {
    public void blow() {
        System.out.println("Blowing bubbles!");
    }
}

假设出于难以想象的原因,我们将 Bubble.java 放在名为c:workclasses的文件夹下。

当然,因为它在caveofprogramming.stuff包中,所以它实际上需要放在c:workclassescaveofprogrammingstuff子目录中。 所以,现在我们有两个文件,具体如下: 工作目录:C:工作Fish.java:C:workcaveofprogrammingaquariumFish.java Bubble.java:C:workclassescaveofprogrammingstuffBubble.java所有我们需要做的是提供额外的classpath javac的; 我们需要告诉它c:workc:workclasses下都有文件。

 

不需要指定 Bubble.java 本身;类路径和包名是 javac 找到它所需的全部。

所以从c:work我们可以发出以下命令;请注意以分号分隔的类路径列表:

javac -cp c:work;c:workclasses CaveofprogrammingaquariumFish.java

java 命令与之前完全相同,除了我们还需要指定额外的类路径(否则它怎么知道在哪里可以找到 Bubble.class?)。

java -cp c:work;c:workclasses Caveofprogramming.aquarium.Fish

   在 Jar 文件中使用代码

如果您将一些类打包在一个 jar 文件中呢?

让我们转到c:workclasses并输入以下内容(在按上述方式编译以创建 Bubble.class 文件之后):

jar cvf test.jar Caveofprogramming

然后我们将test.jar移动到c:work

现在我们可以像这样编译 Fish.java:

 

javac -cp c:work;c:worktest.jar CaveofprogrammingaquariumFish.java

…在类路径中简单地命名test.jar

同样,当我们想要运行 Fish.class 时,我们可以再次将 jar 文件添加到类路径并从任何地方运行代码:

C:work>java -cp c:work;test.jar caveofprogramming.aquarium.Fish
Blowing bubbles!

   将您的程序放入 Jar 文件中

当然,我们也可以将主类放在自己的jar文件中(当然是编译!):

c:work> jar cvf fish.jar caveofprogramming
added manifest
adding: caveofprogramming/(in = 0) (out= 0)(stored 0%)
adding: caveofprogramming/aquarium/(in = 0) (out= 0)(stored 0%)
adding: caveofprogramming/aquarium/Fish.class(in = 358) (out= 265)(deflated 25%)
adding: caveofprogramming/aquarium/Fish.java(in = 201) (out= 144)(deflated 28%)

所以现在我们把主程序放在fish.jar 中,而test.jar 包含main.jar 依赖的其他文件。我们可以这样运行程序:

java -cp c:worktest.jar;c:workfish.jar caveofprogramming.aquarium.Fish
Blowing bubbles!

简单!

不幸的是,当您开始执行诸如向 jar 清单添加主类、使用 ANT、使用 -jar 选项等操作时,事情会变得比这更麻烦。如果您不小心,您最终可能会感觉自己没有不知道哪个类路径正在被注意,哪个没有,或者你应该首先指定类路径。


慕源网 » Java 包:如何使用包构建 Java 代码项目

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录