我有一个主目录(包含main.java)和一个子目录(包含child.java)。
我的问题是如何在main.java中实例化child.java
package mypackage
child.class
编译javac -d . child.java
,这会创建一个新的mypackage目录。import subdirectory.mypackage.*
(注意-d选项将child.class放在mypackage文件夹中)我收到以下错误:
mainAESE.java:9: cannot access subdirectory.child
bad class file: RegularFileObject[./subdirectory/child
class file contains wrong class: mypackage.child
Please remove or make sure it appears in the correct subdirectory of the class
child childInstance= new child();
^
1 error
请帮助我!!
答案 0 :(得分:4)
确保包文件夹mypackage
和Main.class
共享父文件夹。
package mypackage;
public class Child {}
我假设Main
类是在default
包中创建的。
public class Main {
public static void main(String []args){
mypackage.Child child=new mypackage.Child();
}
}
,你的目录结构应该是:
main-directory/
|
|----/mypackage/
Child.class
|
| Main.class
| Main.java
| Child.java
并按照以下命令启动/加载Main
问题,
java Main
答案 1 :(得分:3)
你需要做两件事。
将当前导入替换为import mypackage.child
导入需要反映您要导入的类的fully qualified name。它与您机器上的类文件的位置无关。您还可以import mypackage.*
导入包mypackage
中的所有类,而不是单独指定您想要的类...这只是一种编码风格选择。
将subdirectory
添加到您的类路径
另一方面,类路径 与机器上类文件的位置有关。顾名思义,它列出了JVM应该查找程序使用的类的所有位置的路径。或者,正如Oracle所说,"The class path tells JDK tools and applications where to find third-party and user-defined classes."您不需要告诉Java在哪里找到它附带的特殊类(如String
)。
#2的说明取决于您运行程序的方式(从命令行或Eclipse或其他方式)。由于您使用的是命令行(根据您的评论),因此您需要使用-classpath
标记或其简写-cp
,如下所示:java -cp ./subdirectory main
答案 2 :(得分:2)
您有以下文件:
main.java mypackage的/ child.java
在main.java中,第一行应该是:import mypackage.child;
从main.java所在的目录运行
javac mypackage/child.java
然后:
javac main.java
mypackage应该包含child.java和child.class
java main应该可以工作,因为它会在名为mypackage的子目录中查找子项。