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

编译Java代码出现‘error: cannot find symbol’错误,求原因与解决

解决编译Welcome.java时的"cannot find symbol"错误

Hey,我来帮你捋清楚这个问题:你碰到的error: cannot find symbol,本质是Java编译器找不到Test类的定义,原因很简单——你的两个类分属不同包,编译时没告诉编译器去哪里找依赖的Test类。

问题原因

你的Welcome类在com.project包,Test类在com.code包。当你直接执行javac com/project/Welcome.java时,编译器只会在当前目录和系统默认类路径下查找依赖类,它不知道com.code包的位置,自然找不到Test这个符号。

正确的解决方法

你需要用-cp-classpath的简写)参数给编译器指定类路径,告诉它去哪里找依赖类。这里有两种稳妥的方式:

方式1:一次性编译所有相关类

直接把两个类的文件都传给javac,同时指定类路径为当前目录(因为当前目录是包结构的根目录):

javac -cp . com/project/Welcome.java com/code/Test.java

方式2:先编译依赖类,再编译主类

先单独编译Test类,再编译Welcome类时指定类路径包含当前目录:

# 第一步:编译Test类
javac com/code/Test.java
# 第二步:编译Welcome类,指定类路径为当前目录
javac -cp . com/project/Welcome.java

你提到的javac -cp com/code/* com/project/Welcome.java其实不是标准写法,com/code/*会匹配该目录下的文件,但编译器需要的是包含包结构的根目录(也就是当前目录.)。如果Test类已经编译完成,这个命令可能临时生效,但更规范的做法是用.作为类路径参数。

内容的提问来源于stack exchange,提问作者Martin.B

火山引擎 最新活动