It is just a requirement enforced by many Java compilers (javac included) ; it's not part of the language definition. It allows the compiler to find classes that it may need to compile while it's in the process of compiling another class. [ July 14, 2003: Message edited by: Ernest Friedman-Hill ]
Ernest is correct. This has been part of the language going all the way back to Oak. It is supposed to simplify dynamic compiling. If you are using a class in your class and that class hasn't been compiled yet, the compiler may be able to figure out where to look for it based on the source name.