Programs must be compiled either into the
class file format specified by The Java Virtual Machine Specification, Java SE 7 Edition, or into a representation that can be mapped into that format by a class loader written in the Java programming language.
Furthermore, the resulting
class file must have certain properties. A number of these properties are specifically chosen to support source code transformations that preserve binary compatibility. The required properties are:
1. The class or interface must be named by its binary name, which must meet the following constraints: