我刚刚读到这句话:

format()方法做的第一件事是从名为output.vm的类路径加载Velocity模板

请解释在这种情况下类路径是什么意思,以及我应该如何设置类路径。


当前回答

类路径是系统的一个环境变量。此变量的设置用于向java编译器提供任何包层次结构的根。

其他回答

类的静态成员可以直接调用,而无需创建对象实例。 由于主方法是静态的,Java虚拟机可以调用它,而不需要创建包含主方法的类的任何实例,这是程序的起点。

类路径是系统的一个环境变量。此变量的设置用于向java编译器提供任何包层次结构的根。

对于linux用户,为了总结和补充其他人在这里所说的,你应该知道以下内容:

$CLASSPATH is what Java uses to look through multiple directories to find all the different classes it needs for your script (unless you explicitly tell it otherwise with the -cp override). Using -cp requires that you keep track of all the directories manually and copy-paste that line every time you run the program (not preferable IMO). The colon (":") character separates the different directories. There is only one $CLASSPATH and it has all the directories in it. So, when you run "export CLASSPATH=...." you want to include the current value "$CLASSPATH" in order to append to it. For example: export CLASSPATH=. export CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java-5.1.12.jar In the first line above, you start CLASSPATH out with just a simple 'dot' which is the path to your current working directory. With that, whenever you run java it will look in the current working directory (the one you're in) for classes. In the second line above, $CLASSPATH grabs the value that you previously entered (.) and appends the path to a mysql dirver. Now, java will look for the driver AND for your classes. echo $CLASSPATH is super handy, and what it returns should read like a colon-separated list of all the directories, and .jar files, you want java looking in for the classes it needs. Tomcat does not use CLASSPATH. Read what to do about that here: https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html

当用Java编程时,你可以通过在源文件的顶部放置这样的东西来让其他类对你正在编写的类可用:

import org.javaguy.coolframework.MyClass;

或者有时你会“批量进口”一些东西,说:

import org.javaguy.coolframework.*;

所以在之后的节目中,当你说

MyClass mine = new MyClass();

Java虚拟机将知道在哪里找到编译后的类。

让VM查看机器上的每个文件夹是不切实际的,因此必须向VM提供要查看的位置列表。这是通过将文件夹和jar文件放在类路径中来实现的。

在讨论如何设置类路径之前,让我们先讨论一下.class文件、包和.jar文件。

首先,让我们假设MyClass是作为项目的一部分构建的,它位于项目中名为output的目录中。.class文件将位于output/org/javaguy/coolframework/MyClass.class(与该包中的所有其他文件一起)。为了得到这个文件,你的路径只需要包含文件夹“输出”,而不是整个包的结构,因为你的导入语句提供了所有的信息给VM。

现在让我们假设你将CoolFramework捆绑到一个.jar文件中,并将这个CoolFramework.jar放到项目的lib目录中。你现在需要把lib/CoolFramework.jar放到你的类路径中。VM将在jar文件中查找org/javaguy/coolframework部分,并找到您的类。

所以,类路径包含:

JAR文件,以及 到包层次结构顶部的路径。

如何设置类路径?

每个人学习的第一种方法似乎都是使用环境变量。在unix机器上,你可以这样说:

export CLASSPATH=/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/

在Windows机器上,您必须进入环境设置,并添加或修改已经存在的值。

第二种方法是在启动Java时使用-cp参数,如下所示:

java -cp "/home/myaccount/myproject/lib/CoolFramework.jar:/home/myaccount/myproject/output/"  MyMainClass

这是第三种方法的变体,通常使用.sh或.bat文件来计算类路径,并通过-cp参数将其传递给Java。

以上这些都有一个“陷阱”。在大多数系统(Linux、Mac OS、UNIX等)上,冒号(':')是类路径分隔符。在windowsm中,分隔符是分号(';')

那么最好的方法是什么呢?

通过环境变量全局设置是不好的,原因和全局变量是一样的。更改CLASSPATH环境变量使一个程序可以工作,但最终破坏了另一个程序。

应该用-cp。我通常确保我的CLASSPATH环境变量在我开发的地方是一个空字符串,这样我就避免了全局类路径问题(当全局类路径为空时,一些工具就不高兴了——我知道有两个常见的、价值数十亿美元的授权J2EE和Java服务器,它们的命令行工具就有这种问题)。

设置CLASSPATH系统变量

要显示当前的CLASSPATH变量,在Windows和UNIX (Bourne shell)中使用这些命令: Windows: C:\>设置CLASSPATH 在UNIX中:% echo $CLASSPATH

要删除CLASSPATH变量的当前内容,可以使用以下命令: Windows: C:\> set CLASSPATH= 在UNIX中:% unset CLASSPATH;出口类路径

要设置CLASSPATH变量,可以使用以下命令(例如): Windows: C:\> set CLASSPATH=C:\users\george\java\classes UNIX下:% CLASSPATH=/home/george/java/classes;出口类路径