在java中导入类文件

时间:2012-12-06 06:47:00

标签: java import package javac

我有一个主目录(包含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”
  5. 编译了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
    

    请帮助我!!

3 个答案:

答案 0 :(得分:4)

确保包文件夹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 Main

答案 1 :(得分:3)

你需要做两件事。

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

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

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