首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类路径规范

类路径规范
EN

Stack Overflow用户
提问于 2010-09-06 14:52:09
回答 2查看 7.6K关注 0票数 4

我有两个程序,一个在/home/redhat/Documents/java1/j1目录中

Demo1.java

代码语言:javascript
复制
package j1;
public class Demo1
{
        public void print()
        {
                System.out.println("hi");
        }
}

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

Demo2.java

代码语言:javascript
复制
import j1.*;
public class Demo2
{
        Demo2()
        {
                Demo1 d=new Demo1();
        }
}

当我说

代码语言:javascript
复制
javac -classpath /home/redhat/Documents/java1/j1 Demo2.java

我得到以下错误

代码语言:javascript
复制
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实例,请帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-06 14:58:19

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

代码语言:javascript
复制
javac -classpath /home/redhat/Documents/java1 Demo2.java

我之前错过的另一个步骤是Demo1类的编译。Javac编译器将查找".class“文件,而不是".java”文件。因此,在执行该命令之前,您需要:

代码语言:javascript
复制
javac Demo1.java

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

票数 4
EN

Stack Overflow用户

发布于 2010-09-06 15:02:15

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

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

代码语言:javascript
复制
javac -sourcepath /home/redhat/Documents/java1 Demo2.java

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3649553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档