nuevo operador vs método newInstance() en Java

nuevo operador vs método newInstance() en Java

En Java, new es un operador donde newInstance() es un método donde ambos se utilizan para la creación de objetos. Si conocemos el tipo de objeto que se creará, entonces podemos usar un nuevo operador, pero si no conocemos el tipo de objeto que se creará al principio y se pasa en tiempo de ejecución, en ese caso se usa el método newInstance().
En general, el operador nuevo se usa para crear objetos, pero si queremos decidir el tipo de objeto que se creará en tiempo de ejecución, no hay forma de que podamos usar el operador nuevo. En este caso tenemos que utilizar el método nuevaInstancia() .

Discutamos el nuevo operador .  En Java, la creación de objetos se lleva a cabo en 3 pasos como se enumeran: creación de instancias de objetos e inicialización de objetos y invocación del constructor .

Datatype   variable;    

Como usaremos la nueva palabra clave, el compilador interpreta la variable como un objeto.

Datatype   object   = new Constructor(); 

Ejemplo:

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  );      }   }   

Producción
[1 4 3] 

Nota: También podemos usarlo con el constructor donde queremos llamar a objetos, no a variables.

Ahora, si se nos ocurre el método newInstance() que está presente dentro del paquete java.lang dentro de la clase Class. Como ya comentamos, se utiliza cuando cargamos la clase desde fuentes remotas. 
Considere un escenario en el que nos conectamos a la base de datos más tarde utilizando nuestro programa Java para su ejecución. Se puede explicar más claramente con la JDBC ejemplo. Recuerda que allí usamos el Clase.paraNombre() método para cargar registros dinámicamente y allí usamos el método newInstance() encima para crear objetos dinámicamente.  

Ejemplo:

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'  );      }   }   

Producción:

nuevo operador vs método newInstance() en Java

Explicación de salida: paraNombre() método devuelve la clase ' Clase' objeto al que estamos llamando nueva instancia() método que devolverá el objeto de esa clase que estamos pasando como argumento de línea de comando. 

  • Si la clase aprobada no existe entonces Excepción de clase no encontrada ocurrirá. 
  • Excepción de instancia ocurrirá si la clase pasada no contiene el constructor predeterminado como nueva instancia() El método llama internamente al constructor predeterminado de esa clase en particular.  Excepción de acceso ilegal Ocurrirá si no tenemos acceso a la definición de la definición de clase especificada.

Artículo relacionado: Reflexión en Java