类路径规范

时间:2010-09-06 06:52:09

标签: java

我有两个节目 一个在目录/ 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 个答案:

答案 0 :(得分:4)

你的类路径错了。您应该指向任何声明的包的

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

我想念的其他前一步是编译Demo1类。 Javac编译器将查找“.class”文件,而不是“.java”文件。所以在执行之前你需要:

javac Demo1.java

作为一种改进,我建议你在包“j”而不是默认包中声明你的第二个类,因为在另一个已经包含包的根路径中有根源路径并不是一个好主意。

答案 1 :(得分:0)

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

在您的情况下,您有一个源类文件,在这种情况下,您应该使用javac的sourcepath选项:

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

javac将在用户类路径下找到j1包,从而解析类型。