8

我有一个主目录(包含 main.java)和一个子目录(包含 child.java)。

我的问题是如何在 main.java 中实例化 child.java

  1. 我已经公开了子类。& 将第 1 行添加为package mypackage
  2. 我已经编译child.class了它,javac -d . child.java它创建了一个新的 mypackage 目录。
  3. 我尝试按如下方式在 main 中导入子类:(import subdirectory.mypackage.*注意 -d 选项将 child.class 放在 mypackage 文件夹中)
  4. 我用“javac main.java”编译了 main.java 文件

我收到以下错误:

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

请帮我!!

4

3 回答 3

5

确保包文件夹mypackageMain.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 主程序

于 2012-12-06T07:06:42.143 回答
3

你需要做两件事。

  1. 将您当前的导入替换为import mypackage.child

    导入需要反映您要导入的类的完全限定名称。它与您机器上类文件的位置无关。您也可以import mypackage.*从包中导入所有类,mypackage而不是单独指定您想要的类……这只是一种编码风格选择。

  2. 添加subdirectory到您的类路径

    另一方面,类路径确实与您机器上类文件的位置有关。顾名思义,它列出了 JVM 应在其中查找程序使用的类的所有位置的路径。或者,正如 Oracle 所说,“类路径告诉 JDK 工具和应用程序在哪里可以找到第三方和用户定义的类。” 您不需要告诉 Java 在哪里可以找到它附带的特殊类(例如String)。

    #2 的说明取决于您运行程序的方式(从命令行或 Eclipse 或其他方式)。由于您使用的是命令行(根据您的评论),因此您需要使用-classpath标志或其简写形式,-cp如下所示:java -cp ./subdirectory main

于 2012-12-06T06:51:35.820 回答
3

您有以下文件:

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 的子目录中查找子目录。

于 2012-12-06T06:59:46.100 回答