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");
}
}
我需要添加classpath -cp才能运行它:java -cp ../ hello.a
为什么我不需要在第一种情况下设置类路径?我什么时候需要添加-cp?
答案 0 :(得分:1)
类路径是java
(程序)查找类的地方。默认包含一系列系统范围的内容(对于JDK),然后是当前目录:.
。
没有package
行,您的类位于“默认包”中,基本上没有包。这意味着它的全名是a
(或多或少),并且java将在类路径中的每个元素CP_ELEM的名为$CP_ELEM/a.class
的文件中查找它。在默认情况下,这相当于./a.class
,这很好,因为该文件存在。
使用package
行,您的班级位于hello
包中,其全名为hello.a
。这意味着java将在$CP_ELEM/hello/a.class
中查找它,相当于./hello/a.class
- 它不存在。但是如果你所在的目录恰好被称为“你好”,那么java -cp .. hello.a
相当于../hello/a.class
,那么它将起作用。
答案 1 :(得分:1)
回答你的问题
我应该何时设置课程路径
始终当您处理更复杂的项目时,您会发现几乎总是需要设置类路径。这可以像使用-cp
命令一样手动完成,也可以由IDE完成。
回答你的第二个问题
为什么我不需要在第一种情况下设置类路径
我首先需要解释一下类路径。简而言之,存在告诉VM在哪里查找文件的类路径。在第一种情况下,由于您没有包,因此使用默认位置来查找您的类,因此不需要类路径。但是,当你复杂化并在此时添加一个包时,需要一个类路径
答案 2 :(得分:1)
Classpath就像告诉系统在哪里找到我的类:
如果你没有类路径,java将尝试加载类
从默认目录(可能是你在哪里运行命令)
现在让我们假设您将已编译的类放在文件夹" bin"和#34; src"文件夹
告诉系统从" bin"加载类。文件夹你必须给他以下参数:
-cp bin;
我也看到你不了解java中的包装系统,所以这里快速解释一下:
打包就像你的班级目录,例如:
如果您将类的包设置为package a;
,并且您的类路径目录设置为" bin"
你必须创建名为" a"的文件夹。 in" bin"文件夹,然后在那里移动编译的类,对源文件执行相同的操作,但在" src"夹
只是说你可以使用位于http://www.eclipse.org
的eclipse如果这对您没有帮助,那么请看一下:https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html