Classes aren't objects in Java. Sort of. Its confusing because there is a class called Class. This isn't really the class though. A better name would have been ClassDescription. Its an object that allows you to dig through the definition of a given class (examine method names, arg lists, and such).

But this class description thing isn't really THE class (even though its called Class).

If you define this:
\nclass Foo\n{\n    public static void f() { System.out.println("Foo.f() - I think"); }\n}\n\nclass Bar extends Foo {}\n

It is not possible to determine from within f() the difference between Foo.f() and Bar.f(). IOW, you can't tell whether the message f() was sent to the class Foo or the class Bar.

That's because there is no "this" pointer that points to the "receiver" of the invocation BECAUSE there is no object that represents the class Foo (or Bar, for that matter).

So classes aren't objects in Java much like they're not objects in C++. They are figments of the compiler's (and Gosling's) imagination.

Just one more annoying (and pointless) inconsistency and complication in the language. Right up there with the idiocy of primitives.

I'd switch to [link|http://croquet.doit.wisc.edu/wiki/tiki-index.php?page=TeaTime|Tea] myself.