What is a Null. Pointer.Exception, and how do I fix itQuestion What causes a Null.Pointer. Exception As you should know, Java types are divided into primitive types boolean, int etc and reference types.Reference types in Java allow you to use the special value null which is the Java way of saying no object.A Null. Pointer. Exception is thrown at runtime whenever your program attempts to use a null as if it was a real reference.For example, if you write this public class Test.String args. 800 Java interview questions answered with lots of diagrams, code, FAQs, and tutorials.The first couple years after college are a time of huge changes in your life, both personal and professional.Looking back on those years, we can often clearly see.Oracle acquired Sun Microsystems in 2010, and since that time Oracles hardware and software engineers have worked sidebyside to build fully integrated systems and.Learning Modern Java A Tutorial Using Java 8 A FastMoving Guide to Java Programming for Experienced Developers Interested in training from the author of these.String foo null. HERE.HERE is going to attempt to run the length method on a null reference, and this will throw a Null.Pointer. Exception.There are many ways that you could use a null value that will result in a Null.Pointer. Exception. The Art Of Travel Alain De Botton Quotes here. If fact, the only things that you can do with a null without causing an NPE are assign it to a reference variable or read it from a reference variable,assign it to an array element or read it from an array element provided that array reference itself is non null,pass it as a parameter or return it as a result, ortest it using the or operators, or instanceof.Question How do I read the NPE stacktraceSuppose that I compile and run the program above javac Test.Exception in thread main java.Null. Pointer. Exception.Test. mainTest. java 4.First observation the compilation succeeds The problem in the program is NOT a compilation error.It is a runtime error.Some IDEs may warn your program will always throw an exception.Second observation when I run the program, it outputs two lines of gobbledy gook.WRONG Thats not gobbledy gook.It is a stacktrace.So lets look at what is says Exception in thread main java.Null. Pointer. Exception.The first line of the stack trace tells you a number of things It tells you the name of the Java thread in which the exception was thrown.For a simple program with one thread like this one, it will be main.Lets move on. It tells you the full name of the exception that was thrown i.Null. Pointer. Exception.If the exception has an associated error message, that will be output after the exception name.Null. Pointer. Exception is unusual in this respect because it rarely has an error message.The second line is the most important one in diagnosing an NPE.Test. mainTest. java 4.This tells us a number of things at Test.Test class. Test.AND it tells us that the statement where this occurred is in line 4 of the file.And if you count the lines in the file above, line 4 is the one that I labelled with the HERE comment.Note that in a more complicated example, there will be lots of lines in the NPE stack trace.But you can be sure that the second line the first at line will tell you where the NPE was thrown.In short the stacktrace will tell us unambiguously which statement of the program has thrown the NPE.Not quite true. There are things called nested exceptions.Question How do I track down the cause of the NPE exception in my code This is the hard part.The short answer is to apply logical inference to the evidence provided by the stack trace, the source code and the relevant API documentation.Lets illustrate with the simple example above first.We start by looking at the line that the stacktrace has told us is where the NPE happened int length foo.HERE. How can that throw an NPE In fact there is only one way it can only happen if foo has the value null.We then try to run the length method on null and.BANG But I hear you say what if the NPE was thrown inside the length method callWell if that happened, the stacktrace would look different.The first at line would say that the exception was thrown in some line in the java.String class, and line 4 of Test.So where did that null come from In this case it is obvious and it is obvious what we need to do to fix it.Assign a non null value to fooOK, so lets try a slightly more tricky example.This will require some logical deduction.Test. private static String foo new String2.String bar, int pos.String args. Test.Exception in thread main java.Null. Pointer. Exception.Test. testTest. java 6.Test. mainTest. java 1.So now we have 2 at lines.The first one is for this line return argspos.So looking at the first line, how could that throw an NPE In fact, there are two ways If the value of bar is null then barpos will throw an NPE.If the value of barpos is null then calling length on it will throw an NPE.So next we need to figure out which of those scenarios explains what is actually happening.Lets start by exploring the first one Where does bar come from It is a parameter to the test method call, and if we look at how test was called, we can see that it comes from the foo static variable.And we can see clearly that we initialized foo to a non null value.That is sufficient to tentatively dismiss this explanation.In theory, something else could changefoo to null.So what about our 2nd scenario Well we can see that pos is 1, so that means that foo1 must be null.Is that possible Indeed it is And that is the problem.When we initialize like this private static String foo new String2.String with two elements that are initialized to null.And then we didnt change the contents of foo.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
November 2017
Categories |