Take a look that the following code snippet:
A a = null
try {
a = new A();
} finally {
a.foo(); // What happens at this point?
}
Suppos开发者_开发知识库e A's constructor throws a runtime exception. At the marked line, am I always guaranteed to get a NullPointerException, or foo() will get invoked on a half constructed instance?
The code inside the try
block contains two distinct operations:
- Create a new
A
instance. - Assign the new instance to a variable named
a
.
If an exception is thrown in step 1, step 2 will not be executed.
Therefore, you will always get a NullPointerException
.
If new A()
raises an exception, you'll always get a NullPointerException because the assignment to a
won't happen.
I think you would always get an NPE at the marked line. The assignment never has a chance to occur.
If the exception occured in the constructor call new A(),That time the object has null value.So the a.foo() gives the null pointer exception.you can give the condition as if(a!=null){ a.foo(); }
精彩评论