Java: exceção lançada no construtor, meu object ainda pode ser criado?

Você poderia me dizer pode ser algum caso quando a exceção está jogando no construtor e object não é nulo. Quero dizer, alguma parte do object é criada e outra não.

public Test(){ name = "John"; // exception // init some other data. } 

Eu entendo neste object sitiation Test será nulo, mas pode ser situação que o teste de object não pode ser nulo (delete bloco de exceção não responder :))?

Uma expressão de criação de instância de class sempre cria um novo object se a avaliação de seu qualificador e argumentos for concluída normalmente e se houver espaço suficiente para criar o object. Não importa se o construtor lança uma exceção; um object ainda é criado. No entanto, a expressão de criação de instância de class não é concluída normalmente, pois propaga a exceção.

No entanto, você ainda pode obter uma referência ao novo object. Considere o seguinte:

 public class C { static C obj; // stores a "partially constructed" object C() { C.obj = this; throw new RuntimeException(); } public static void main(String[] args) { C obj; try { obj = new C(); } catch (RuntimeException e) { /* ignore */ } System.out.println(C.obj); } } 

Aqui, uma referência ao novo object é armazenada em outro lugar antes que a exceção seja lançada. Se você executar este programa, verá que o object não é realmente nulo, embora seu construtor não tenha sido concluído normalmente.

Não. Veja o código do cliente:

 Test myObj = null; try { myObj = new Test(); } catch(MyException e) { System.out.println("" + myObj); } 

Aqui, quando a exceção ocorre, a operação ‘=’ não é executada. Seu código vai direto para o bloco catch e myObj permanece null .

Não. Se ocorrer uma exceção durante a instanciação do object, ele não será criado.

De qualquer forma, você escreveria?

 MyObject obj = new MyObject(); // This code will not be reachable in case of an Exception 

ou:

 MyObject obj = null; try { obj = new MyObject(); } catch (AnyException e) { } // Here, either obj is created correctly, or is null as an Exception occurred. 
  public Test() { name = "John"; try{ // exception // init some other data. }catch(AnyException e) { //catch } } 

O código acima faz sentido conforme a sua expectativa.