Java Reference
In-Depth Information
PITFALL: Arrays with a Class Base Type
The base type of an array can be of any type, including a class type. For example,
suppose
Date
is a class and consider the following:
Date[] holidayList =
new
Date[20];
This creates the 20 indexed variables (
holidayList[0]
,
holidayList[1]
, …,
holidayList[19]
). It is important to note that this creates 20
indexed variables
of type
Date
. This does not create 20
objects
of type
Date
. (The index variables are
automatically initialized to
null
, not to an object of the class
Date
.) Like any other
variable of type
Date
, the indexed variables require an invocation of a constructor
using
new
to create an object. One way to complete the initialization of the array
holidayList
is as follows:
VideoNote
Arrays of
Objects
Date[] holidayList =
new
Date[20];
for
(
int
i = 0; i < holidayList.length; i++)
holidayList[i] =
new
Date( );
If you omit the
for
loop (and do not do something else more or less equivalent), then
when you run your code, you will undoubtedly get an error message indicating a “null
pointer exception.” If you do not use
new
to create an object, an indexed variable like
holidayList[i]
is just a variable that names no object and hence cannot be used as
the calling object for any method. Whenever you are using an array with a class base
type and you get an error message referring to a “Null Pointer Exception,” it is likely
that your indexed variables do not name any objects and you need to add something
such as the above
for
loop.
■
Array Parameters
You can use both array indexed variables and entire arrays as arguments to methods,
although they are different types of parameters. We first discuss array indexed variables
as arguments to methods.
An indexed variable can be an argument to a method in exactly the same way
that any variable of the array base type can be an argument. For example, suppose a
program contains the following declarations:
indexed
variable
arguments
double
n = 0;
double[] a = new double
[10];
int
i;
If
myMethod
takes one argument of type
double
, then the following is legal:
myMethod(n);