What are the possible negative effects of using cyclic definitions in Java?
Normally, a Java compiler produces very “dynamic” output: you can recompile just a single class, and the rest of the application picks up the changes. This happens because the .class format uses dynamic links to reference cross-class constructs such as fields and methods, and they are resolved only at classloading time. In this article, I describe a well-known exception to this behavior and an exception to the exception that is fairly rare but can cause very subtle and hard-to-see errors. Cyclic field definitions cause the latter exception, which leads to somewhat nondeterministic execution in Java.