Java 使用类路径

Java 使用类路径,java,classpath,Java,Classpath,我计划成为一名经过认证的Java程序员,我正在学习Sierra Bates的书。我有一个关于类路径的问题。类路径只需要找到我正在运行/编译的类的支持类,还是只需要找到支持类和类本身?另外,当我从类路径获取包中的类时,只放置文件的地址(指向它的路径)而不是放置它的根包是否合法。谢谢。1-类路径必须允许访问程序中需要运行的每个类。这将包括主类、它调用的任何类以及它们调用的类。如果其中一个类中有一些代码从未被调用,在许多情况下,您不需要让未调用的代码引用这些类 2-您必须将包的根放在类路径中。因此,类

我计划成为一名经过认证的Java程序员,我正在学习Sierra Bates的书。我有一个关于类路径的问题。类路径只需要找到我正在运行/编译的类的支持类,还是只需要找到支持类和类本身?另外,当我从类路径获取包中的类时,只放置文件的地址(指向它的路径)而不是放置它的根包是否合法。谢谢。

1-类路径必须允许访问程序中需要运行的每个类。这将包括主类、它调用的任何类以及它们调用的类。如果其中一个类中有一些代码从未被调用,在许多情况下,您不需要让未调用的代码引用这些类


2-您必须将包的根放在类路径中。因此,类“com.bob.myprog.Main”需要使类路径指向“com”包/文件夹所在的文件夹。它需要包含一个“bob”文件夹,“bob”需要包含一个包含“Main.class”的“myprog”文件夹。

类路径必须同时包含支持类和类本身

但是,有时您可以在不指定类路径的情况下运行单个文件(这样就可以了)。 如以下所述:

类路径的默认值为“”,这意味着只有 搜索当前目录。指定类路径 变量或-cp命令行开关覆盖此值

因此,如果在当前目录中编译了一个类MyClass,则以下操作将起作用:

java MyClass
将类路径指向另一个目录将导致错误(类路径不再包含MyClass):



当您在包中有一个类时,仅将类文件的地址放在类路径中是不够的。根据SCJP Sun Java 5认证程序员学习指南:

为了在包中查找类,您必须在包中有一个目录 包含包的最左侧条目的类路径(包的 “根”)作为子目录


那么编译呢?考虑下面的目录结构:FECT-> Test-> XCOM> A.class,B.java(其中“->”意思是左边的目录包含目录/文件到右边)和下面的代码:包XCOM;公共类A{}包xcom;公共类B扩展了一个{},test作为当前目录,如何从命令行用javac编译B.java?包含“xcom”的文件夹需要在类路径上。这是“测试”。对不起,这是个坏例子。我想问的是,类路径是否只需要找到A.class,或者A.class和B.java。它只需要找到您使用的类。如果main在A中,则需要A。如果A调用或以其他方式使用B,则也需要B。如果main在A中,而A不使用B,则不需要B。但是类路径只指向一个文件夹,在本例中,该文件夹是“test”。类A和B中的
将提供路径的其余部分。
java -cp lib MyClass