I would add that there is no standard whatsoever that I know of for where to put classes. This annoys me to no end and generally causes a lot of problems.

First, I shall explain another concept which digitalboy forgot about: Jar files. A jar file is essentially a zip file that contains a tree of Java classes, and also some metadata. It is common to distribute a package in a jar file. This relates to the classpath in that you can't have a directory in the classpath filled with jars. You have to have each jar listed in the classpath separately.

Anyway, one issue is that because there is no standard system-wide place to put classes (libraries in particular, which are almost always distributed as jars), so it has become common to put a copy of each library that a project needs in the project source tree, and to distribute it with the project in case the user doesn't have it and because you don't where it is anyway. Yikes.

This is what I do on my system:

I made a directory /usr/lib/jars, which contains symlinks to all the libraries on my system (the Java ones anyway). My /etc/profile script (which sets up the shell) iterates through each in /usr/lib/jars/*.jar and adds it to the classpath variable.

I hope that Sun or somebody else will come up with a standard.