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);
 
Search WWH ::




Custom Search