There are. Think about classloaders and the whole dynamic code loading thing. Every single object has a class object associated with it.
Class c = [SomeRandomClass class];
id thingy = [[c alloc] init];
but Java won't let you do the equivalent: Class c = SomeRandomClass;
Object x = new c; Class c = SomeRandomClass.class;
Object x=c.newInstance();In Java's type system, classes are 'first class objects':