当前位置: 首页 > 面试题库 >

Java中的包和目录之间的区别

松桐
2023-03-14
问题内容

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

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

这个线程并没有真正解决我的问题。


问题答案:

还有包和目录之间的关系,但它是一个 必须保持。如果您的类位于“
mypackage1.mypackage2”中,则意味着该java命令将期望在名为“ mypackage1 \
mypackage2”的目录结构(假定使用“ backwards” 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(如果使用的话)有点混淆了问题,因为它“想要”提供目录和程序包名称,有时(但不总是)使它们保持同步。



 类似资料:
  • 问题内容: 我知道已经解决了这个问题,但是我在SO上看到了不一致的论点。 所以,如果我有: 我得到 FALSE 。 据我了解,这是因为和是对同一对象()的两个不同引用。 所以我会有类似的东西: 现在,如果我只想比较两个字符串的 内容 ,我将使用 这是否意味着如果两个引用指向同一个对象,JVM就会简单地返回?因此,它不是在逐个字符地进行比较吗? 谢谢 编辑 拿着电话。感谢您指出优先顺序!!! 当我将

  • 问题内容: 是否有人知道在JRE的认可目录中添加适当的JAR文件(例如Apache XALAN)并将其添加到应用程序的类路径之间有什么区别? 是否可以将一个jar文件添加到认可的lib中,然后将其添加到classpath中? 问题答案: 从技术上讲,您可能可以做到这一点,但是区别在于认可目录中的jar文件是由引导类加载器加载的,而引导加载器可能与从类路径加载jar的类加载器不同。 Xerces和X

  • 问题内容: 正如问题标题本身所言,Java中的Executors和ExecutorCompletionService类之间有什么区别? 我是Threading的新手,所以如果有人可以用一段代码进行解释,那将会很有帮助。 问题答案: 假设您有一组任务,并且要在中异步执行每个任务,并在完成时按1逐个处理结果。 使用,您将像这样: 这种方法的问题是不能保证任务将首先完成。因此,当主线程可能正在处理另一个

  • 问题内容: 在Java中,并作为收藏。但是我不知道在什么情况下应该使用什么时间。两者之间的主要区别是什么? 问题答案: 您正在专门询问ArrayList和HashMap,但我认为要完全了解发生了什么,您必须了解Collections框架。因此,ArrayList实现List接口,而HashMap实现Map接口。因此,真正的问题是您何时要使用列表以及何时要使用地图。这是Java API文档有很大帮助

  • 问题内容: 任何人都可以通过示例清楚地说明Java异常处理中throw与throws之间的区别吗?我曾尝试使用Google谷歌搜索,但无法得出结论。请帮助 问题答案: 子句用于声明异常,关键字用于显式引发异常。 如果我们明智地看待语法,则在其后是一个实例变量,然后是异常类名称。 在方法体内使用关键字来调用异常,在方法声明(签名)中使用子句。 例如 扔 抛出 您不能使用声明多个异常。您可以声明多个异

  • 问题内容: 我想知道将变量声明为和始终在Java块中访问变量之间的区别吗? 问题答案: 重要的是要了解线程安全有两个方面。 execution control, and memory visibility 第一个与控制代码何时执行(包括执行指令的顺序)以及是否可以同时执行有关,第二个与其他线程可以看到存储器中已完成操作的效果有关。由于每个CPU与主内存之间都具有多个高速缓存级别,因此运行在不同CP