7.1. Naming and Capitalization Conventions
The following widely
adopted naming conventions apply to packages, reference types,
methods, fields, and constants in Java. Because these conventions are
almost universally followed and because they affect the public API of
the classes you define, they should be followed carefully:
- Packages
-
Ensure
that your publicly visible package names are unique by prefixing them
with the inverted name of your Internet domain (e.g.,
com.davidflanagan.utils). All package names should
be lowercase. Packages of code used internally by applications
distributed in self-contained JAR files are not publicly visible and
need not follow this convention. It is common in this case to use the
application name as the package name or as a package prefix.
- Reference types
-
A type
name should begin with a capital letter and be written in mixed case
(e.g., String). If a class name consists of more
than one word, each word should begin with a capital letter (e.g.,
StringBuffer). If a type name, or one of the words
of a type name, is an acronym, the acronym can be written in all
capital letters (e.g., URL,
HTMLParser).
Since classes and enumerated types are designed to represent objects,
you should choose class names that are nouns (e.g.,
THRead, Teapot,
FormatConverter).
When
an interface is used to provide additional information about the
classes that implement it, it is common to choose an interface name
that is an adjective (e.g., Runnable,
Cloneable, Serializable).
Annotation types are also commonly named in this way. When an
interface works more like an abstract superclass, use a name that is
a noun (e.g., Document,
FileNameMap, Collection).
- Methods
-
A
method name always begins with a lowercase letter. If the name
contains more than one word, every word after the first begins with a
capital letter (e.g., insert( ),
insertObject(), insertObjectAt(
)). Method names are typically chosen so that the first
word is a verb. Method names can be as long as is necessary to make
their purpose clear, but choose succinct names where possible.
- Fields and constants
-
Nonconstant field names follow the
same capitalization conventions as method names. If a field is a
static final constant, it should be written in
uppercase. If the name of a constant includes more than one word, the
words should be separated with underscores (e.g.,
MAX_VALUE). A field name should be chosen to best
describe the purpose of the field or the value it holds.
The constants defined by enum types are also
typically written in all capital letters. Because other programming
languages use lowercase or mixed case for enumerated values, however,
this convention is not as strong as the convention for capital
letters in the static final fields of classes and
interfaces.
- Parameters
-
Method parameters follow the same
capitalization conventions as nonconstant fields. The names of method
parameters appear in the documentation for a method, so you should
choose names that make the purpose of the parameters as clear as
possible. Try to keep parameter names to a single word and use them
consistently. For example, if a WidgetProcessor
class defines many methods that accept a Widget
object as the first parameter, name this parameter
widget or even w in each
method.
- Local variables
-
Local variable names are an
implementation detail and never visible outside your class.
Nevertheless, choosing good names makes your code easier to read,
understand, and maintain. Variables are typically named following the
same conventions as methods and fields.
In
addition to the conventions for specific types of names, there are
conventions regarding the characters you should use in your names.
Java allows the $ character in any identifier,
but, by convention, its use is reserved for synthetic names generated
by source-code processors. (It is used by the Java compiler, for
example, to make inner classes work.) Also, Java allows names to use
any alphanumeric characters from the entire Unicode character set.
While this can be convenient for non-English-speaking programmers,
the use of Unicode characters should typically be restricted to local
variables, private methods and fields, and other names that are not
part of the public API of a class.
|