我应该什么时候设置 class 路径?

When should I set class path?

public class a {
public static void main(String[] args) {
    System.out.println("Hello, World");
    }
}

对于上面的代码,我可以运行通过javac a.java,然后java a.

但是如果我为它添加一个包:

package hello;
public class a {
public static void main(String[] args) {
    System.out.println("Hello, World");
    }
}

我需要添加类路径 -cp 以便 运行 它:java -cp ../ hello.a

为什么第一种情况不需要设置类路径?什么时候需要加-cp?

class路径是java(程序)寻找classes的地方。默认包含一堆系统范围的东西(对于JDK),然后还有当前目录:..

没有 package 行,您的 class 在 "default package," 中,这基本上是没有包的。这意味着它的全名是 a(或多或少),java 将在名为 $CP_ELEM/a.class 的文件中为 [=34= 中的每个元素 CP_ELEM 查找它]小路。在默认情况下,这相当于 ./a.class,这很好,因为该文件存在。

package 行中,您的 class 在 hello 包中,其全名是 hello.a。这意味着 java 将在 $CP_ELEM/hello/a.class 中查找它,这相当于 ./hello/a.class —— 不存在。但是,如果您所在的目录恰好名为 "hello",那么 java -cp .. hello.a(相当于在 ../hello/a.class 中查找)将起作用。

回答你的问题

When should I set my classpath

总是, 当您处理更复杂的项目时,您会发现几乎总是需要设置您的 class 路径。这将像您使用 -cp 命令或您的 IDE 那样手动完成。

回答你的第二个问题

Why I do not need to set the classpath in the first situation

我首先需要解释一下 class路径。简而言之,classpath 的存在是为了告诉虚拟机在哪里寻找你的文件。在第一种情况下,由于您没有包,默认位置用于查找您的 class,因此不需要 class 路径。但是,当您将事情复杂化并在此时添加包时,需要 class路径

Classpath 就像告诉系统在哪里可以找到我的 classes:
如果您没有 class 路径,java 将尝试加载 class
从默认目录(可能是您 运行 命令所在的位置)。

现在假设您将已编译的 classes 放在文件夹 "bin" 中,将源文件放在 "src" 文件夹中
要告诉系统从 "bin" 文件夹加载 classes 你必须给他以下参数: -cp bin;


另外我看到你不理解 java 中的打包系统所以这里是快速解释:
打包就像你的目录你的class例如:
如果您将 class 的包设置为 package a; 并且您的 class 路径目录设置为 "bin"
您必须在 "bin" 文件夹中创建名为 "a" 的文件夹,然后将已编译的 class 移动到那里,对源文件执行相同的操作,但在 "src" 文件夹中

只是说你可以使用位于 : http://www.eclipse.org

的 eclipse

如果这对你没有帮助,那么看看这个:https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html