Null pointer exceptions
are the most common run time exception error arises during execution of
java program. All values in Java programs are references to objects, and
all the value in variable are default one. Usually in the case of object references,
it is null. Object references are same as pointers in C. In C pointer refers to
the memory location of variable, while in a Java object reference refers to an
object of known type, or be null. On making a call to a method
y.method( );
there are two things
that can be wrong, y refers to a different object or the reference of object y
is null. Normally, the latter one is more common.
Rule for Debugging Null Pointer Exception
1.Point out the error in
line of code.
2.Indicate the object or
an array to declare null whose reference is not given.
3.Point out the reason
for null.
Understand Null Pointer Exception
Suppose we have a class
Wide.
class Wide
{
private int value;
public Wide (int v)
{
value = v;
}
public int getValue()
{
return value;
}
}
public class Large
{
private Wide theWide;
public static void main(String[] args)
{
Large inst = new Large();
System.out.println(inst.theWide.getValue());
}
}
|
Obviously, when
you run this code, you get a null pointer Exception ,the
Wide has default value of null, corresponding to the default value of
constructor for class large.
Output on Command Prompt
C:\akilraj1255>javac Large.java
C:\akilraj1255>java Large Exception in thread "main" java.lang.NullPointerException at Large.main(Large.java:27) |
There are few things to
be noticed here
1.You required to place appropriate constructor, which takes a wide
as a parameter.
public
large (Wide the Wide);
{
the Wide=
the Wide;
}
|
2.You required to change the main program as we are getting default
constructor in it.
Large inst = new Large (new wide(50));
|
3. The Wide refers to the parameter not to the instance
variable. The only way to overcome this problem by using explicitly 'this' on
the left hand side.
public large(Wide theWide)
{
this.theWide = theWide;
}
|
4. Again both side of the assignment refers to the same
instance variable, because this. is redundant In order to demarcate you need to
give new convention like underscore( _).
public large(Wide _theWide)
{
this.theWide = _the Wide;
}
|
0 comments:
Post a Comment