You can find isSynthetic() methods in many of the java.lang.reflection classes, such as Method, Field, Constructor, and of course Class (which is really in java.lang) since JDK 5. A synthetic attribute has been part of the class file format for much longer - see
JVMS2 4.7.6. Basically a synthetic class/field/method/cionstructor is one that does not appear (in the same form) in the original source code, but has been added or modified by the compiler for some reason.
Most commonly synthetic fields occur in order to support nested classes - when an inner class has access to an instance of an outer class, this is implemented by creating a synthectic field in the inner class, generally named this$0, which holds a reference to the outer class instance.
Offhand I don't know of any good examples of synthetic
classes (as opposed to synthetic fields). Maybe this is a feature which is
theoretically possible, but not actually used by current compilers. Or more likely, it is used, somewhere, but it's fairly obscure. Or maybe it's used somewhere quite common, and I'm just ignorant of it.
Hope that helps...