我在同一目录中有两个文件,即Main.java
和Functions.java
Main.java
的内容是:
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String s = scan.next();
Functions you = new Functions(s);
System.out.println("Your name is " + you);
}
}
和Functions.java
:
public class Functions {
public String name;
public Functions(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
我在终端上手动编译并运行它们。这就是我所做的:
javac folder1/folder2/*.java
之后java folder1/folder2/Main.java
但它给了我一个错误:
error: cannot find symbol
Functions you = new Functions(s);
symbol: class Functions
即使它们在同一个目录上,它仍然会给出一个错误。
编辑:为了编译和运行,我交换了代码。抱歉。
- 运行
javac Main.java
- 运行
java Main
注意1:您不需要显式编译正在编译的文件中使用的文件。如果Java编译器看到您在类A
中使用类B
,Java将在编译容器类(本例中为类A
(时隐式编译所有类(包括类B
(。
注意2:如果您使用JDK>11,那么您只需使用一个命令即可编译并运行该程序。JEP 330,启动单文件源代码程序,是JDK 11版本中引入的新功能之一。所以,您可以运行java ClassName.java
。
问题是类路径。
folder1
| folder2
| | Main.java
| | Functions.java
运行javac folder1/folder2/*.java
之后,您将拥有类文件。
folder1
| folder2
| | Main.class
| | Main.java
| | Functions.class
| | Functions.java
由于类不在包中,所以folder2需要在类路径上。运行main。
java -cp folder1/folder2 Main
注意,我在类名上去掉了.java
。
如果您不想提供-cp参数(设置类路径(,您可以cd folder1/folder2
,那么您将在包含类文件的文件夹中。你可以直接打字。
java Main
我在你的java文件中试过了。当它工作时,只有按下回车键才能看到任何输出。