调用自定义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




