Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

`return value' from Constructor Exception in Java?

Take a look that the following code snippet:

A a = null
try {
  a = new A();
} finally {
  a.foo();  // What happens at this point?
}

Suppose 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?

like image 916
Lajos Nagy Avatar asked Mar 19 '10 00:03

Lajos Nagy


3 Answers

The code inside the try block contains two distinct operations:

  1. Create a new A instance.
  2. 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.

like image 136
SLaks Avatar answered Oct 08 '22 22:10

SLaks


If new A() raises an exception, you'll always get a NullPointerException because the assignment to a won't happen.

like image 32
Phil Ross Avatar answered Oct 08 '22 21:10

Phil Ross


I think you would always get an NPE at the marked line. The assignment never has a chance to occur.

like image 1
slau Avatar answered Oct 08 '22 22:10

slau