In an article on the double-checked locking idiom, I found this quote:
One special case of lazy initialization that does work as expected without synchronization is the static singleton. When the initialized object is a static field of a class with no other methods or fields, the JVM effectively performs lazy initialization automatically.
Why is the emphasized part important? Why doesn't it work if there are other methods or fields?
(The article is already more than 10 years old. Is the information still relevant?)