novo operador vs método newInstance() em Java

novo operador vs método newInstance() em Java

Em Java new é um operador onde newInstance() é um método onde ambos são usados ​​para criação de objetos. Se soubermos o tipo de objeto a ser criado, podemos usar um operador new, mas se não soubermos o tipo de objeto a ser criado no início e for passado em tempo de execução, nesse caso o método newInstance() será usado.
Em geral o operador new é usado para criar objetos, mas se quisermos decidir o tipo de objeto a ser criado em tempo de execução não há como usar o operador new. Neste caso temos que usar o Método newInstance() .

Vamos discutir o novo operador .  Em Java, a criação de objetos ocorre em 3 etapas conforme listado: instanciação do objeto e inicialização do objeto e invocação do construtor .

Datatype   variable;    

Como usaremos a palavra-chave new o compilador interpreta a variável como um objeto

Datatype   object   = new Constructor(); 

Exemplo:

Java
   // Java Program to Illustrate new Operator   // Importing required classes    import     java.util.*  ;   // Main class   class   GFG     {      // Main drive method      public     static     void     main  (  String  []     args  )      {      // List   al;      // Ny now al is just a variable      // Now creating object using new operator      List   <  Integer  >     al     =     new     ArrayList   <>  ();      // Adding elements to above List      al  .  add  (  1  );      al  .  add  (  4  );      al  .  add  (  3  );      // Printing elements of List      System  .  out  .  print  (  al  );      }   }   

Saída
[1 4 3] 

Observação: Também podemos usá-lo com o construtor onde queríamos chamar objetos e não variáveis.

Agora, se criarmos o método newInstance() que está presente no pacote java.lang dentro da classe Class. Como já discutimos, é usado onde carregamos a classe de fontes remotas. 
Considere um cenário em que nos conectamos ao banco de dados posteriormente usando nosso programa Java para execução. Isso pode ser explicado de forma mais evidente com o JDBC exemplo. Lembre-se que usamos o Classe.forNome() para carregar registros dinamicamente e lá usamos o método newInstance() em cima dele para criar objetos dinamicamente.  

Exemplo:

Java
   // Java Program to Demonstrate Working of newInstance()   // Method present inside java.lang.Class   // Class 1   // Class 2   class   A     {      int     a  ;   }   class   B     {      int     b  ;   }   // Class 3   // Main class   public     class   GFG     {      // Method 1      // To create an instance of class whose name is      // passed as a string 'c'.      public     static     void     fun  (  String     c  )      throws     InstantiationException        IllegalAccessException        ClassNotFoundException      {      // Creating an object of type 'c'      Object     obj     =     Class  .  forName  (  c  ).  newInstance  ();      // Printing the type of object created      System  .  out  .  println  (  'Object created for class:'      +     obj  .  getClass  ().  getName  ());      }      // Method 2      // Main driver method      public     static     void     main  (  String  []     args  )      throws     InstantiationException        IllegalAccessException        ClassNotFoundException      {      // Calling above method over 'A'      fun  (  'A'  );      }   }   

Saída:

novo operador vs método newInstance() em Java

Explicação de saída: paraNome() método retorna a classe ' Aula' objeto no qual estamos chamando novaInstância() método que retornará o objeto daquela classe que estamos passando como argumento de linha de comando. 

  • Se a classe passada não existir então ClassNotFoundException ocorrerá. 
  • InstantionException ocorrerá se a classe passada não contiver o construtor padrão como novaInstância() O método chama internamente o construtor padrão dessa classe específica.  Exceção de acesso ilegal ocorrerá se não tivermos acesso à definição da classe especificada.

Artigo relacionado: Reflexão em Java