java中导入类文件

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

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

  1. 我让孩子上课了。 并添加第1行作为package mypackage
  2. 我用javac -d . child.java编译了child.class javac -d . child.java 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 

请帮我!!

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

你需要做两件事。

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

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

  2. subdirectory添加到类路径中

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

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

您有以下文件:

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