Synthetic Class in Java
Java has the ability to create classes at runtime. These classes are known as Synthetic Classes or Dynamic Proxies.
See http://java.sun.com/j2se/1.5.0/docs/guide/reflection/proxy.html for more information.
Other open-source libraries, such as CGLIB and ASM also allow you to generate synthetic classes, and are more powerful than the libraries provided with the JRE.
Synthetic classes are used by AOP (Aspect Oriented Programming) libraries such as Spring AOP and AspectJ, as well as ORM libraries such as Hibernate.
Well I found the answer to the first question on google:
A class may be marked as synthetic if it is generated by the compiler, that is, it does not appear in the source code.
This is just a basic definition but I found it in a forum thread and there was no explanation. Still looking for a better one...