<< Chapter < Page | Chapter >> Page > |
This is an upgrade to the program from Question 9 .
Success at last
The code in the following fragment resolves the compilation problem from Question 8 and the runtime problem from Question 9 .
void doIt(){
char[]ref = {'J','o','e'};
System.out.print(ref);System.out.print(" ");
ref[0]= 'T';
ref[1]= 'o';
ref[2]= 'm';
System.out.println(ref);}//end doIt()
Simply initializing the local reference variable named ref satisfies the compiler, making it possible to compile the program.
Initializing the local reference variable named ref with a reference to a valid array object eliminates the NullPointerException that was experienced in Question 9 .
Printing the contents of the array object
The print statement passes the reference variable to the print method. The print method finds that the reference variable refers to a valid object (instead of containing null as was the case in Question 9 ) and behaves accordingly.
The print statement causes the initialized contents of the array object to be displayed. Then those contents are replaced with a new set of characters. The println statement causes the new characters to be displayed.
B. Runtime Error
Purposely initializing a local variable
This is an update to the program from Question 8 . The code in the following fragment solves the compilation problem identified in Question 8 .
void doIt(){
char[]ref = null;
In particular, initializing the value of the reference variable named ref satisfies the compiler and makes it possible to compile the program.
A NullPointerException
However, there is still a problem, and that problem causes a runtime error.
The following statement attempts to use the reference variable named ref to print something on the screen. This results, among other things, in an attemptto call the toString method on the reference. However, the reference doesn't refer to an object. Rather, it contains the value null .
System.out.print(ref);
The result is a runtime error with the following infamous NullPointerException message appearing on the screen:
java.lang.NullPointerException
at java.io.Writer.write(Writer.java:107)at java.io.PrintStream.write(PrintStream.java:245)
at java.io.PrintStream.print(PrintStream.java:396)at Worker.doIt(Ap159.java:22)
at Ap159.main(Ap159.java:15)
A. Compiler Error
Garbage in, garbage out
Earlier programming languages, notably C and C++ allowed you to inadvertently write programs that process the garbage left in memory by previous programsrunning there. This happens when the C or C++ programmer fails to properly initialize variables, allowing them to contain left-over garbage from memory.
Member variables are automatically initialized to default values
That is not possible in Java. All member variables in a Java object are automatically initialized to a default value if you don't write the code toinitialize them to some other value.
Local variables are not automatically initialized
Local variables are not automatically initialized. However, your program will not compile if you write code that attempts to fetch and use a value in a localvariable that hasn't been initialized or had a value assigned to it.
Notification Switch
Would you like to follow the 'Object-oriented programming (oop) with java' conversation and receive update notifications?