Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译包名不正确的.java文件_Java_Compilation_Directory_Package - Fatal编程技术网

编译包名不正确的.java文件

编译包名不正确的.java文件,java,compilation,directory,package,Java,Compilation,Directory,Package,在Boyarsky和Selikoff的《OCA Oracle认证助理Java SE 8程序员我的学习指南考试1Z0-808》一书中,我在第一章的复习考试中遇到了一个令人困惑的问题: 十四,。给定文件/my/directory/named/A/Bird.java中的以下类: 在此处插入代码 公共类鸟{} 如果我们从/my/目录编译,以下哪项将替换在此处插入代码?(选择所有适用项) A.打包my.directory.named.A B.打包my.directory.named.A C.名为.a的包

在Boyarsky和Selikoff的《OCA Oracle认证助理Java SE 8程序员我的学习指南考试1Z0-808》一书中,我在第一章的复习考试中遇到了一个令人困惑的问题:

十四,。给定文件/my/directory/named/A/Bird.java中的以下类:

在此处插入代码
公共类鸟{}

如果我们从/my/目录编译,以下哪项将替换
在此处插入代码
?(选择所有适用项)

A.
打包my.directory.named.A

B.
打包my.directory.named.A

C.
名为.a的包

D.
名为.A的包

E.
a包

F.
A包

G.
不编译

书中指出正确答案仅为D(我们将忽略一个事实,即他们写了“选择所有适用的”,尽管他们在书中早些时候声明,只有当有超过1个答案时才会这样做),并解释如下:

D.包名称表示当前路径下的任何文件夹,即 在本例中命名为.A。选项B不正确,因为包名称区分大小写, 就像变量名和其他标识符一样

在各个层面上,我对这一点完全感到困惑:

  • 我尝试使用
    javac/named/A/Bird.java
    从/my/目录编译该文件,并且使用上述任何一个答案,代码编译成功。此外,无论我在类的第一行
    package
    之后写什么,代码都会编译

  • 让我们假设我完全错过了第1点(并非双关语)中的要点,而这不是我们从/my/directory编译的方式,那么我有以下问题:

    • 如何从/my/目录编译

    • 为什么选项B不正确?显然,他们对B.的解释毫无意义


  • 有人能解释一下这件事吗?

    简单的回答是这个问题是错误的

    可以从任何地方编译单个类,而不考虑包层次结构,如果它没有对其他自定义类的引用(因此可以使用
    String
    等)。这是因为它不需要对其他类进行任何查找,因此在编译时类路径中不需要任何特殊的内容。一旦添加对class
    named.a.Rock
    的引用,编译将不再工作,因为目录层次结构与包层次结构不匹配(除非将
    Bird
    放入
    named.a
    包中)


    所以问题中的例子很糟糕。一旦您添加了对另一个类的引用并且包层次结构开始起作用,
    D
    就是正确的答案。这个问题有点糟糕,因为您可以显式地设置编译时类路径,此时“当前目录”的概念一点都不重要,所有的答案都是有效的。

    好吧,因为这里没有人对此感兴趣……您不认为他们会在打印之前测试这些东西吗?为作者和技术评论员感到羞耻。还有什么废话?有多少人因为这样的错误问题而未能通过OCA?