You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用自定义Java类时出现cannot find symbol编译错误的问题咨询

嘿,这个问题其实挺常见的,本质是Java编译器找不到hi类的字节码文件导致的。咱们一步步来解决它:

你的代码与编译错误

代码1(hi.java):

package hello;
public class hi {
    int x=30;
}

代码2(hii.java):

package hello;
public class hii {
    public static void main(String args[]) {
        hi ob=new hi();
        int u= ob.x+33;
        System.out.println(u);
    }
}

编译时触发的错误:

error: cannot find symbol
hi ob = new hi();
^
error: cannot find symbol
hi ob = new hi();
^

问题根源

hii类依赖于hi类,但你编译hii.java时,hi类还没被编译成.class字节码文件,或者编译器在当前路径下找不到它的字节码,因此抛出了“找不到符号”的错误。

解决步骤

1. 规范目录结构

因为两个类都声明了package hello;,必须把这两个.java文件放在名为hello的文件夹中,目录结构如下:

你的工作目录/
    hello/
        hi.java
        hii.java

2. 先编译依赖的hi

打开终端,切换到hello文件夹的上级目录(即包含hello文件夹的目录),执行编译命令:

javac hello/hi.java

执行后,hello文件夹内会生成hi.class字节码文件。

3. 编译hii

同样在上级目录,执行:

javac hello/hii.java

此时编译器能找到已编译好的hi.class,可顺利完成编译。

4. 运行程序

依旧在上级目录,通过带包名的方式运行主类:

java hello.hii

运行后就能输出63啦!

小技巧

如果想一次性编译所有文件,不用分两次操作,可在上级目录执行:

javac hello/*.java

这个命令会自动编译hello文件夹内所有.java文件,省心不少。

内容的提问来源于stack exchange,提问作者Jayant Khanna

火山引擎 最新活动