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:

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á.
Artigo relacionado: Reflexão em Java