java中导入类文件
我有一个主目录(包含main.java)和一个子目录(包含child.java)。
我的问题是如何在main.java中实例化child.java
- 我让孩子上课了。 并添加第1行作为
package mypackage
- 我用
javac -d . child.java
编译了child.class
javac -d . child.java
javac -d . child.java
,它创建一个新的mypackage目录。 - 我尝试在main中导入子类,如下所示:
import subdirectory.mypackage.*
(注意-d选项将child.class放在mypackage文件夹中) - 我用“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
请帮我!!
确保包文件夹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主要
你需要做两件事。
-
用
import mypackage.child
替换当前导入导入需要反映您要导入的类的完全限定名称 。 它与您机器上的类文件的位置无关。 你也可以
import mypackage.*
从mypackage
包导入所有类,而不是单独指定你想要的那个…这只是一个编码风格的选择。 -
将
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。