我正在制作一个俄罗斯方 block 游戏 http://zetcode.com/tutorials/javagamestutorial/tetris/ java 教程。我不断收到此编译错误:
文件:/Users/Adelaide/Documents/MyGame/src/Shape.java [行:(无源位置)] 文件位于错误的目录中或声明为错误包的一部分。目录名称“src”与包名称“zetcode”不匹配。
我尝试移动它创建名为“zetcode”的文件,但我不知道如何解决这个问题,你能帮助我吗?
最佳答案
在 Java 中,package
语句定义类的 namespace 。这里您正在学习一个教程,它指导您使用 com.zetcode
包。没关系,但包还定义了您的文件必须驻留在其中的目录结构。这里您的 Shape 对象必须位于此文件夹结构中:
src/com/zetcode/Shape.java
通过将 Shape.java
留在 src/
文件夹的根目录中,您表示该类没有包(或者更确切地说,它具有默认的未命名包) ,因此当编译器在源代码中看到 package
语句时,它会抛出您看到的错误。
解决方案
最简单的解决方案是将源文件移动到与其包语句匹配的文件夹结构中。想象一下,包名称中分隔单词的点是斜杠(路径分隔符)。创建 src/com/zencode 目录并将文件移至该文件夹中。编译器应该更高兴。
有关包的更多详细信息
包名称很重要,因为它们允许 Java 显式地知道正在使用哪个类。您可能有许多 Shape
类,只要它们位于不同的包中,但是当您导入
特定类及其包时,编译器确定要加载哪个类。
此外,您可能会注意到,软件包名称通常以制作该软件包的公司的网站域的倒序开头。例如,com.abcxyz
将是以 www.abcxyz.com
作为其网站的公司的类的包名称的开头。在代码中使用其他人的包名称是一个坏主意,因为这意味着您编写的代码是由该公司或组织编写的。
您说,当您删除或更改包声明时,您遇到了其他错误。这可能是因为其他类(如 Board.java)隐式导入 Shape 类,因为它们位于同一个包中,如果更改 Shape 的包名称,编译器将无法找到它。您需要更改所有其他类的包语句以匹配新包。可以把它想象成一个住在某个地址的家庭。如果他们搬家了,他们都需要知道他们的新地址。这里的“family”是一组属于在一起的类(在您的例子中是 Shape、Board、Tetris),包名称是它们的地址。
关于java - 制作俄罗斯方 block 游戏时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62007229/