类路径规范

4
我有两个程序 一个在目录 /home/redhat/Documents/java1/j1
Demo1.java
package j1;
public class Demo1
{
        public void print()
        {
                System.out.println("hi");
        }
}

另一个在目录 /home/redhat/Documents/java1/j 中

Demo2.java

import j1.*;
public class Demo2
{
        Demo2()
        {
                Demo1 d=new Demo1();
        }
}

当我说
javac -classpath /home/redhat/Documents/java1/j1 Demo2.java

我收到了以下错误信息。
Demo2.java:2: package j1 does not exist
import j1.*;
^
Demo2.java:7: cannot access Demo1
bad class file: /home/redhat/Documents/java1/j1/Demo1.java
file does not contain class Demo1
Please remove or make sure it appears in the correct subdirectory of the classpath.
                Demo1 d=new Demo1();
                ^
2 errors

我想在Demo2中访问Demo1实例,请帮忙。
2个回答

4

你的类路径不正确。你应该指向任何声明包的根目录

javac -classpath /home/redhat/Documents/java1 Demo2.java

我之前遗漏的一步是编译Demo1类。Javac编译器将寻找“.class”文件而不是“.java”文件。因此,在执行之前,您需要:

javac Demo1.java

作为一项改进,我建议您将第二个类声明在“j”包内而不是默认包内,因为在已经包含包的根路径内再次包含根源路径并不是一个好主意。


我不想把它放在同一个目录下。 - elle

0

javac可执行文件命令行中指定的classpath选项用于定义用户类路径位置,编译器可以在其中找到类型的编译过的class文件。换句话说,编译器期望在用户类路径中找到已编译的.class文件。

在您的情况下,您有一个源class文件,因此您应该使用javac的sourcepath选项:

javac -sourcepath /home/redhat/Documents/java1 Demo2.java

javac会在用户类路径下找到j1包,并因此解析该类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接