I'll try to keep it simple.
Java uses classloaders to load classes inside JVM. Java is able to load classes from binaries (*.class files) on filesystem or *.class files inside jar files.
ClassLoader is something that has a "loadClass" functionality - it gets a string name of the class (with package and everything) and returns Class - a class file that describes this object. Once loaded, the class can be used inside the JVM.
Example (pseudocode):
ClassLoader myCl = ...
Class<Foo> fooClass = myCl.loadClass("some.package.Foo")
Why would you even bother about classloaders? Well, usually you don't really create your own classloaders. Hoewever sometimes you need them.
Lets say, you're creating application server/web server. It's possible to load the application in runtime, applications should not interfere. In this case you might want to implement your own class loader and load each WAR with the help of its own classloader (this is essentially what actually happens in JBoss, tomcat and so forth).
Another example,
Lets say you store your class definitions in some "weird" places - like database, you you get the class definitions via network. In this case you'll implement your classloader that fetches the class definition and then loads.
And the last note. Your own class loader shouldn't really "load" the class by itself, usually its only responsible to bring the byte stream and then call its parent's method to do actual loading (all class loaders extends java.lang.ClassLoader).
Of course its a very broad theme to be covered in this post, I just tried to give a general directions to start with. You should probably read some documentation about classloaders.
For example: this one should be good
Hope, this helps