javac 找不到符号

问题场景:两个java文件A,B,在同一个目录D,  A需要用到B的类, 用cmd进入D目录编译A时报的错。

遇到这个问题的比较多, 我就总结下吧:

       1、环境变量classpath没有配好   配好后, javac A B  javac B A或者javac *.java就行

                  说没有配好有两个情况: 一是  点前面有空格啥的     二是没有配点 

                 当然不配classpath    javac   -classpath 指定目录也可以

      2、package 定义出现了问题

            文件的开头定义了package, 把他去掉就好了

 

拓展下吧: 我看别的博客里有对不同目录下javac怎么编译的问题。 我就研究了下, 终于弄出来了

 package d1.d2  A文件  第一行

package d3.d4   B文件  第一行

d1目录和d3目录都在src目录下

             那么A文件应该放在src/d1/d2目录下  B文件同理放在src/d3/d4目录下 ,B文件引用A文件中的类,因此B文件 需要导入A文件,因此B文件加上   import d1.d2.A

     打开命令窗口,进入src目录, 输入javac  d1/d2/*.java  d3/d4/*.java  编译成功。 然后在src/d1/d2/和src/d3/d4下可以看到生成的class文件

    如果不想把生成的class文件放在src里面,而是放在与src同级的目录下, 那么操作类似:

       第一步: 进入src的上级目录(此时该目录下先建好build目录)

      第二部:javac -d build  src/d1/d2/*.java  src/d3/d4/*.java

  

      javac  的 -sourcepath参数介绍, 他指定项目的根目录, 也就是我的例子里面的src目录, 前面两个例子都没指定都可以成功,说明javac自己能找到,应该是根据package d1.d2这种,把d1的上级目录当做了src目录。 值得注意的一点是,虽然项目路径不同,通过 加参数-sourcepath  src1;src2 这种方式也能编译成功; 但是不能运行,报错无法加载主类, 这种情况我就不继续研究了, 我不认为会出现一个项目会用到另外一个项目的文件。 就这样吧

 

 

 

 

 

     

 

 

 

### Java 编译错误:不到符号类的原因及解决方法 Java编译时出现“不到符号类”的错误,通常表明编译器无法识别或定位某个类的定义。以下是导致该问题的主要原因及对应的解决方法: #### 1. 类未导入 如果代码中使用了某个类但没有正确导入相关的包,编译器将无法到该类的定义。例如,`ArrayList` 是 `java.util` 包中的一个类,若未导入该包,则会引发“不到符号”错误[^3]。 ```java // 错误示例:未导入 ArrayList public class Example { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); // 编译错误:不到符号类 ArrayList } } // 正确示例:导入 ArrayList import java.util.ArrayList; public class Example { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); } } ``` #### 2. 类名拼写错误 类名拼写错误是另一个常见原因。Java 是大小写敏感的语言,因此即使类名仅有一个字母的大小写不匹配,也会导致编译失败[^1]。 ```java // 错误示例:类名大小写错误 public class Example { public static void main(String[] args) { arraylist<String> list = new arraylist<>(); // 编译错误:不到符号类 arraylist } } // 正确示例:类名大小写正确 import java.util.ArrayList; public class Example { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); } } ``` #### 3. 类未定义 如果代码中引用了一个未定义的类,编译器同样会抛出“不到符号”错误。确保所有使用的类都已在项目中正确定义或导入[^2]。 ```java // 错误示例:类未定义 public class Example { public static void main(String[] args) { CustomClass obj = new CustomClass(); // 编译错误:不到符号类 CustomClass } } // 正确示例:定义 CustomClass class CustomClass { // 类内容 } public class Example { public static void main(String[] args) { CustomClass obj = new CustomClass(); } } ``` #### 4. 构造方法或方法签名错误 如果类存在但构造方法或方法签名错误,编译器也会认为符号不可用。例如,尝试调用一个不存在的构造方法会导致错误[^4]。 ```java // 错误示例:构造方法签名错误 import java.util.ArrayList; public class Example { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(10); // 编译错误:不到符号构造方法 } } // 正确示例:使用正确的构造方法 import java.util.ArrayList; public class Example { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); } } ``` #### 5. 类路径配置错误 如果项目依赖外部库(如第三方 JAR 文件),但类路径未正确配置,编译器将无法到这些库中的类。确保在编译和运行时正确设置 `-cp` 参数[^3]。 ```bash # 编译时指定类路径 javac -cp .:lib/some-library.jar Example.java # 运行时指定类路径 java -cp .:lib/some-library.jar Example ``` --- ### 总结 “不到符号类”的错误通常是由于类未导入、类名拼写错误、类未定义、构造方法或方法签名错误,或者类路径配置错误引起的。通过仔细检查代码并根据上述解决方法逐一排查,可以有效解决问题。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值