logo

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á. 
  • InstantionExceptionocorrerá 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 ilegalocorrerá se não tivermos acesso à definição da classe especificada.

Artigo relacionado: Reflexão em Java