Java Reference
In-Depth Information
The
Car(String make, String model, int numDoors)
constructor
demonstrates another use for keyword
this
. Specifically, it demonstrates a scenario
where constructor parameters have the same names as the class's instance fields. Pre-
fixingavariablenamewith“
this.
”causestheJavacompilertocreatebytecodethat
accesses the instance field. For example,
this.make = make;
assigns the
make
parameter's
String
objectreferencetothis(thecurrent)
Car
object's
make
instance
field. If
make = make;
was specified instead, it would accomplish nothing by as-
signing
make
'svaluetoitself;aJavacompilermightnotgeneratecodetoperformthe
unnecessary assignment. In contrast, “
this.
” isn't necessary for the
numDoors =
nDoors;
assignment, which initializes the
numDoors
field from the
nDoors
para-
meter value.
Declaring and Accessing Class Fields
Inmanysituations,instancefieldsareallthatyouneed.However,youmightencounter
asituationwhereyouneedasinglecopyofafieldnomatterhowmanyobjectsarecre-
ated.
For example, suppose you want to track the number of
Car
objects that have been
created, and introduce a
counter
instance field (initialized to 0) into this class. You
also place code in the class's constructor that increases
counter
's value by 1 when
an object is created. However, because each object has its own copy of the
counter
instancefield,thisfield'svalueneveradvancespast1.
Listing2-7
solvesthisproblem
by declaring
counter
to be a class field, by prefixing the field declaration with the
static
keyword.
Listing 2-7.
Adding a
counter
class field to
Car
class Car
{
String make;
String model;
int numDoors;
static int counter;
Car(String make, String model)
{
this(make, model, 4);
}
Car(String make, String model, int numDoors)