2015-09-23 40 views
2
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命令../ hello.a

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

+0

我想首先理解一个类路径是什么是有益的[参见这里](http://stackoverflow.com/questions/2396493/what-i S-A-类路径 - 困惑 - 和需要 - 一个人触摸到理解) –

回答

1

要回答你的问题

我什么时候应该把我的类路径

始终,你更复杂的项目,你会发现,你的类路径中几乎总是需要设置。这可以像您使用-cp命令或通过IDE一样手动完成。

要回答你的第二个问题

为什么我不需要设置classpath中在第一种情况下

我首先要解释一下有关类路径的一点点。简而言之,classpath存在告诉虚拟机在哪里查找文件。在你没有包的第一种情况下,默认位置被用来找到你的类,所以不需要classpath。然而,当你复杂的事情,在这一点上需要一个类路径添加了一个包

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

类路径就像是告诉系统在哪里可以找到我的课:
如果没有classpath中java会尝试加载类
从默认目录(可能在您运行命令的地方)。

现在让我们假设你把编译后的类文件夹中的“bin”和来源“SRC”文件夹
告诉系统从“bin”的加载类文件夹,你必须给他下面的参数: -cp bin;


此外,我看你不明白的包装系统在Java所以这里的快速解释:
包装是喜欢你的类,例如目录:
如果您将类的包设置为package a;,并且您的类路径目录设置为“bin”
您必须在“bin”文件夹中创建名为“a”的文件夹,然后将编译后的类移动到该源文件夹中文件,但在“SRC”文件夹

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

如果这没有帮助你,然后在此我们来看一看:https://www3.ntu.edu.sg/home/ehchua/programming/java/J9c_PackageClasspath.html

相关问题