Java 类路径规范

Java 类路径规范,java,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

我有两个节目 目录/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的实例
请帮助。

您的类路径错误。您应该指向任何声明包的根目录

javac -classpath /home/redhat/Documents/java1 Demo2.java
我之前错过的另一个步骤是编译Demo1类。Javac编译器将查找“.class”文件,而不是“.java”文件。因此,在执行之前,您需要:

javac Demo1.java

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

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

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

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

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

我不想将其放在同一目录中