A type declaration declares a class type (§8) or an interface type (§9):
TypeDeclaration:
ClassDeclaration
InterfaceDeclaration
;
A Java compiler must ignore extra ";
" tokens appearing at the level of type declarations. Stray semicolons are permitted in Java solely as a concession to C++ programmers who are used to writing:
class date { int month, day, year; };
(In C++, but not in Java, one can provide a comma-separated list of identifiers in
order to declare variables between the "}
" and the ";
".) Extra semicolons should
not be used in new Java code. Software that reformats Java code can delete them.
By default, the types declared in a package are accessible only within the compilation units of that package, but a type may be declared to be public
to grant access to the type from code in other packages (§6.6, §8.1.2, §9.1.2).
A Java implementation must keep track of types within packages by their fully qualified names (§6.7). Multiple ways of naming a type must be expanded to fully qualified names to make sure that such names are understood as referring to the same type. For example, if a compilation unit contains the single-type-import declaration (§7.5.1):
import java.util.Vector;
then within that compilation unit the simple name Vector
and the fully qualified
name java.util.Vector
refer to the same type.
When Java 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:
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 Java compiler and 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 Java packages are stored in a database (§7.2.2), the host system need not enforce such restrictions.
In practice, many Java 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.