The .class syntax is the same as the syntax for accessing static fields, but it is not really a static field; This is a special language feature. It is similar to the property of the length array, which is accessed as if it were a field, but was not actually stored as one.
To see the difference, consider this example class:
class Test { public static Class<Test> myClass = Test.class; }
Running javap Test gives
class Test { public static java.lang.Class<Test> myClass; Test(); static {}; }
As you can see, Test.myClass is stored as a static field, since we ourselves declared it, but Test.class not displayed, because it is not actually stored as a static field.
source share