在 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/