我计划成为一名经过认证的 Java 程序员,并且正在学习 Sierra-Bates 的书。我有一个关于类路径的问题。类路径是否只需要找到我正在运行/编译的类的支持类,或者支持类和类本身?另外,当我从类路径中获取包中的类时,只放置文件的地址(它的路径)而不是放置它的根包是否合法。谢谢。
2 回答
1 - 类路径必须允许访问需要在程序中运行的每个类。这将包括主类和它调用的任何类以及它们调用的类。如果其中一个类中有一些代码从未被调用,那么在许多情况下,您不需要让这些类被未调用的代码引用。
2 - 您必须将包的根目录放在类路径中。因此,“com.bob.myprog.Main”类需要将类路径指向“com”包/文件夹所在的文件夹。它需要包含一个“bob”文件夹,“bob”需要包含一个“myprog”文件夹,其中包含“Main.class”。
类路径必须包含支持类和类本身。
但是,有时您可以在不指定类路径的情况下运行单个文件(它会起作用)。如http://docs.oracle.com/javase/tutorial/essential/environment/paths.html中所述:
类路径的默认值为“.”,表示只搜索当前目录。指定 CLASSPATH 变量或 -cp 命令行开关会覆盖此值。
因此,如果您在当前目录中编译了一个 MyClass 类,则以下内容将起作用:
java MyClass
而将类路径指向另一个目录会导致错误(类路径不再包含 MyClass):
java -cp lib MyClass
当你在一个包中有一个类时,将地址放到类路径中的类文件中是不够的。根据 SCJP Sun Certified Programmer for Java 5 Study Guide:
为了在包中找到一个类,你必须在你的类路径中有一个目录,其中包含包的最左边的条目(包的“根”)作为子目录。