我应该什么时候设置 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
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
如果这对你没有帮助,那么看看这个:https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html