When packages are stored in a file system (�7.2.1), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:
* The type is referred to by code in other compilation units of the package in which the type is declared. * The type is declared public (and therefore is potentially accessible from code in other packages).
This restriction implies that there must be at most one such type per compilation unit. This restriction makes it easy for a compiler for the Java programming language or an implementation of the Java virtual machine to find a named class within a package; for example, the source code for a public type wet.sprocket.Toad would be found in a file Toad.java in the directory wet/sprocket, and the corresponding object code would be found in the file Toad.class in the same directory.
When packages are stored in a database (�7.2.2), the host system must not impose such restrictions.
In practice, many programmers choose to put each class or interface type in its own compilation unit, whether or not it is public or is referred to by code in other compilation units. A compile-time error occurs if the name of a top level type appears as the name of any other top level class or interface type declared in the same package (�7.6).
For SCJP you have to know that a public class, A say, must be defined in a file named A.java. You do not have to know why.
Another interesting thing is that an empty java file with no content does not give any compilation error. But it may not generate any class files (I hope)
Joined: Oct 12, 2000
I think the entire file is silently skipped... A sourcefile may contain AT MOST one public class which then must have the same name as the file. It may contain ANY number of non-public classes. Combining the two, a source file containing no classes is therefore legal. As classfiles are created one per class, no classfile would result if there were no classes defined in a source.
I do not think it is a good idea to snub anyone, however simple and trivial the question, that the person is asking, might appear on the surface. Perhaps, this is the reason why we have more programmers than software engineers today!. I encourage you to read this interview.