Java : コンストラクタで例外

Javaで、コンストラクタで例外が発生したらどうなるのか、という疑問。たとえば、次のコードを考える。

Object obj = null
try{
  obj = new ExceptionalObject(); //例外発生
}catch(Exception e){}
if (obj == null) {
  System.out.println("null");
}else{
  System.out.println("not null");
}

このプログラムは"null"が出力されるのか、"not null"が出力されるのか?直感的には"null"になりそうだが、out of order書き込みの可能性を考えると、一概にそうとは言えないかもしれない。
というようなことを、double-checked locking idiomの記事を読みながら思いついた。

      • -

TBがついてましたが、この件を本当に検証するには、全てのJava処理系で全ての最適化オプションを確認しないと検証したことにならないような気がします。