Java Reference
In-Depth Information
PITFALL: Null Pointer Exception
If the compiler asks you to initialize a class variable, you can always initialize the
variable to null . However, null is not an object, so you cannot invoke a method
using a variable that is initialized to null . If you try, you will get an error message
that says “Null Pointer Exception.” For example, the following code would produce a
“Null Pointer Exception” if it were included in a program:
ToyClass2 aVariable = null ;
String representation = aVariable.toString();
The problem is that you are trying to invoke the method toString() using null
as a calling object. But null is not an object; it is just a placeholder. So null has
no methods. Because you are using null incorrectly, the error message reads “Null
Pointer Exception.” You get this error message any time a class variable has not been
assigned a (reference to an) object, even if you have not assigned null to the variable.
Any time you get a “Null Pointer Exception,” look for an uninitialized class variable.
The way to correct the problem is to use new to create a class object, as follows:
ToyClass2 aVariable = new ToyClass2("Chiana", 3);
String representation = aVariable.toString();
The new Operator and Anonymous Objects
Consider an expression such as the following, where ToyClass is defined in Display 5.11 :
ToyClass variable1 = new ToyClass("Joe", 42);
As illustrated in Display 5.13 , the portion new ToyClass("Joe", 42) is an invocation
of a constructor. You can think of the constructor as returning a reference to the
location in memory of the object created by the constructor. If you take this view, the
equal sign in this line of code is just an ordinary assignment operator.
There are times when you create an object using new and use the object as an argument
to a method, but then never again use the object. In such cases, you need not give the
object a variable name. You can instead use the expression with the new operator and the
constructor directly as the argument. For example, suppose you want to test to see whether
the object in variable1 (in the earlier line of code) is equal to an object with the same
number and with the name spelled in all uppercase letters. You can do so as follows:
if (variable1.equals( new ToyClass("JOE", 42)))
System.out.println("Equal");
else
System.out.println("Not equal");
 
Search WWH ::




Custom Search