Javac“找不到符号”
我有这样的根目录:
├── classes └── src └── vehicles ├── Bicycle.java └── BicycleMain.java
Bicycle.java
package vehicles; public class Bicycle { public int cadence; public int gear; public int speed; public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } public void setCadence(int newValue) { cadence = newValue; } public void setGear(int newValue) { gear = newValue; } public void setSpeed(int newValue) { speed = newValue; } public int getGear() { return gear; } public int getCadence() { return cadence; } public int getSpeed() { return speed; } public void applyBrake(int decrement) { speed -= decrement; } public void speedUp(int increment) { speed += increment; }
BicycleMain.java
package vehicles; import vehicles.*; public class BicycleMain { public static void main (String args[]){ Bicycle Bike = new Bicycle(10, 20, 1); System.out.println("We have a new bicycle with speed = " +Bike.getSpeed()+", cadence = "+Bike.getCadence()+", gear = "+Bike.getGear()); } }
我编译了Bicycle.java并且成功了,但没有为BicycleMain.java编译:
symbol : class Bicycle location: class vehicles.BicycleMain Bicycle Bike = new Bicycle(10, 20, 1); ^ src/vehicles/BicycleMain.java:6: cannot find symbol symbol : class Bicycle location: class vehicles.BicycleMain Bicycle Bike = new Bicycle(10, 20, 1); ^ 2 errors
我尝试使用Netbeans和IT WORKS运行这些文件! 但是为什么我在CLI中编译时它不起作用?
首先,要使用javac
编译java源文件,您需要指定要显式编译的文件。
例:
javac PathToSourceFile/FileName.java
如果源文件在当前工作目录中,则无需提供path
。
第二,每当java遇到import abc.xyz.ClassName;
它尝试针对classpath
或当前工作目录解析abc/xyz/ClassName
。
因此,如果你在车辆文件夹内并编译你的代码,它将不会编译,因为它将寻找文件夹车辆内的文件夹车辆(它不存在!)。
但是,你可以在车辆文件夹内执行此操作
javac -cp ../ BicycleMain.java
它应该编译,因为classpath将设置为包含车辆的目录( ../
)。 这将解决你的Bicycle
课程。
然后使用
java -cp ../ vehicles/BicycleMain
运行。
尝试删除行import vehicles.*;
来自BicycleMain.java
,他们在命令行中使用javac进行编译。
顺便说一句,因为当你在javac编译时,你在文件夹vehicles
,你写了一个声明import vehicles.*;
在BicycleMain.java
,这意味着编译器vehicles
文件夹中有另一个文件夹vehicles
,这不是这里的情况
只需从开头删除包装行,它就可以100%工作。
转到通过终端存储文件的文件夹,然后键入javac * .java
也不需要导入类。
我已经解决了这个问题,从“src”编译。
像这样: javac ./my_folder/my_file.java
亲切的问候