java - Java中包和目录的区别

标签 java directory package

Java 项目中,将所有 .java 文件保存在同一个文件夹中是否意味着它们在同一个包中?

与将所有项目文件保存在一个文件夹中相比,为我们的项目打包有什么区别?

This thread并没有真正解决我的问题。

最佳答案

包和目录之间存在一种关系,但必须维护这种关系。如果您有一个位于“mypackage1.mypackage2”中的类,这意味着 java 命令将期望在名为“mypackage1\mypackage2”的目录结构中找到它(假设“向后”Windows 表示法),该目录结构进一步嵌入到一个目录(我们称之为“myjava”)中,该目录的名称位于 classpath 中(或者直接位于“当前目录”中)。

因此,您的 Java 类(内部表示 package mypackage1.mypackage2;)位于“\Users\myName\myjava\mypackage1\mypackage2\”中,您将“\Users\myName\myjava"在类路径中,否则您将当前目录设置为"\Users\myName\myjava"。

如果你把它搞混了,要么根本找不到这个类,要么你会得到一个类似于永远模糊的“NoClassDefFoundError”的错误。

至于为什么人们会使用包(和目录),原因与“命名空间”和“关注点分离”有关(查一下)。如果没有包并且所有“java.lang”、“java.io”、“sun.misc”等类都在一起,Java 将很难保持直线。首先,必须使用名称“前缀”来保持名称的直截了当并避免名称冲突。许多逻辑分组将丢失。

对于你自己的项目,你不需要为你自己编写的简单小程序使用包,但如果你写了一些你可能会送给别人的东西,使用诸如“myname.myproject”这样的包是礼貌的(替代当然是你的名字和项目),所以你给它的人可以将它与其他人结合起来,而不会发生名称冲突。

在大型应用程序中,您会发现使用更多层次的分离有助于您保持功能的直接性,这样您就知道一切都在哪里。它还不鼓励您在不同功能区域之间“跨越边界”,因此您不会将不相关的逻辑纠缠在一起。

Eclipse(如果您使用它)有点混淆了这个问题,因为它“想要”提供目录和包名称并且有时(但不总是)使它们保持同步。

关于java - Java中包和目录的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652899/

相关文章:

java - Android 中的发送和接收套接字实现

java - 从spring bean名称获取类对象

git - 如何在 git 中保留 DIRECTORY 文件模式或权限?

r - 通过命令行安装二进制压缩 R 包

java - 避免通过 jsonschema2pojo 生成 setter 方法

linux - 在 Bash 中处理目录名称中的空格

C#在拖动操作期间检测桌面文件夹鼠标?

java - 从网页中提取链接

java - 从命令行运行包中的java

java - 使用java生成repmat()方法