resueltos polimorfismo objetos objeto metodos herencia ejercicios ejemplos crear como clases clase atributos abstracta java

polimorfismo - ¿Cuáles son todas las diferentes formas de crear un objeto en Java?



herencia en java (22)

Además, puede deserializar datos en un objeto. ¡Esto no pasa por la clase Constructor!

ACTUALIZADO : ¡Gracias Tom por señalar eso en tu comentario! Y Michael también experimentó.

Pasa por el constructor de la superclase no serializable más derivada.
Y cuando esa clase no tiene constructor no-args, se genera una InvalidClassException en la deserialización.

Consulte la respuesta de Tom para un tratamiento completo de todos los casos ;-)
¿Hay alguna otra forma de crear un objeto sin usar la palabra clave "nueva" en java

Tuve una conversación con un compañero el otro día sobre esto.

Está lo obvio que es usar un constructor, pero ¿qué otras formas hay?


Dentro del lenguaje Java, la única forma de crear un objeto es llamando a su constructor, ya sea explícita o implícitamente. El uso de los resultados de la reflexión en una llamada al método constructor, la deserialización utiliza la reflexión para llamar al constructor, los métodos de fábrica envuelven la llamada al constructor para abstraer la construcción real y la clonación es similarmente una llamada de constructor envuelto.


Depende exactamente a qué te refieres con crear, pero algunos otros son:

  • Método de clonación
  • Deserialización
  • Reflection (Class.newInstance ())
  • Reflexión (objeto constructor)

Desde la perspectiva del usuario API, otra alternativa a los constructores son los métodos de fábrica estáticos (como BigInteger.valueOf ()), aunque para el autor de la API (y técnicamente "de verdad") los objetos todavía se crean utilizando un constructor.


Esto debe notarse si eres nuevo en Java, cada objeto ha heredado de Object

clon Objeto nativo protegido () arroja CloneNotSupportedException;


Existe un tipo de objeto que no puede ser construido por mecanismos de creación de instancias normales (constructores de llamadas): Arrays . Las matrices se crean con

A[] array = new A[len];

o

A[] array = new A[] { value0, value1, value2 };

Como dijo Sean en un comentario, esto es sintácticamente similar a una llamada de constructor e internamente no es mucho más que asignación e inicialización cero (o inicialización con contenido explícito, en el segundo caso) un bloque de memoria, con un encabezado para indicar el tipo y la longitud.

Al pasar argumentos a un método varargs, una matriz se crea (y completa) implícitamente también.

Una cuarta forma sería

A[] array = (A[]) Array.newInstance(A.class, len);

Por supuesto, la clonación y la deserialización también funcionan aquí.

Hay muchos métodos en la API estándar que crean matrices, pero de hecho están usando una (o más) de estas formas.


Hay CINCO formas diferentes de crear objetos en Java:

1. Usando la palabra clave `new`:

Esta es la forma más común de crear un objeto en Java. Casi el 99% de los objetos se crean de esta manera.

MyObject object = new MyObject();//normal way

2. Al usar el método de fábrica:

ClassName ObgRef=ClassName.FactoryMethod();

Ejemplo:

RunTime rt=Runtime.getRunTime();//Static Factory Method

3. Mediante el uso de concepto de clonación:

Al usar clone() , el clone() se puede usar para crear una copia de un objeto existente.

MyObjectName anotherObject = new MyObjectName(); MyObjectName object = anotherObjectName.clone();//cloning Object

4. Usando `Class.forName ()`:

Si conocemos el nombre de la clase y si tiene un constructor público predeterminado, podemos crear un objeto de esta manera.

MyObjectName object = (MyObjectNmae) Class.forName("PackageName.ClassName").newInstance();

Ejemplo:

String st=(String)Class.forName("java.lang.String").newInstance();

5. Uso de la deserialización de objetos:

La deserialización de objetos no es más que crear un objeto a partir de su forma serializada.

ObjectInputStreamName inStream = new ObjectInputStreamName(anInputStream ); MyObjectName object = (MyObjectNmae) inStream.readObject();


Hay cinco formas diferentes de crear un objeto en Java,

1. Usando new palabra clave → se llama al constructor

Employee emp1 = new Employee();

2. Utilizando el método newInstance() del constructor Class → get called

Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee") .newInstance();

También se puede escribir como

Employee emp2 = Employee.class.newInstance();

3. Usando el método newInstance() de Constructor → se llama el constructor

Constructor<Employee> constructor = Employee.class.getConstructor(); Employee emp3 = constructor.newInstance();

4. Usando el método clone() → sin llamada de constructor

Employee emp4 = (Employee) emp3.clone();

5. Uso de deserialización → sin llamada de constructor

ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj")); Employee emp5 = (Employee) in.readObject();

Los primeros tres métodos new keyword y newInstance() incluyen una llamada de constructor pero luego dos métodos de clonación y deserialización crean objetos sin llamar al constructor.

Todos los métodos anteriores tienen diferentes códigos de bytes asociados, Leer diferentes formas de crear objetos en Java con Ejemplo de ejemplos y una descripción más detallada, por ejemplo, la conversión de códigos de bytes de todos estos métodos.

Sin embargo, se puede argumentar que la creación de una matriz u objeto de cadena también es una forma de crear el objeto, pero estas cosas son más específicas para algunas clases y son manejadas directamente por JVM, mientras que podemos crear objetos de cualquier clase usando estas 5 formas.


Hay cuatro formas diferentes de crear objetos en Java:

A Usando new palabra clave
Esta es la forma más común de crear un objeto en Java. Casi el 99% de los objetos se crean de esta manera.

MyObject object = new MyObject();

B. Usando Class.forName()
Si conocemos el nombre de la clase y si tiene un constructor público predeterminado, podemos crear un objeto de esta manera.

MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();

C Usando clone()
El clon () se puede usar para crear una copia de un objeto existente.

MyObject anotherObject = new MyObject(); MyObject object = (MyObject) anotherObject.clone();

D. Usar object deserialization
La deserialización de objetos no es más que crear un objeto a partir de su forma serializada.

ObjectInputStream inStream = new ObjectInputStream(anInputStream ); MyObject object = (MyObject) inStream.readObject();

Puedes leer desde here


Hay varias formas:

  • A través de Class.newInstance .
  • A través de Constructor.newInstance .
  • A través de la deserialización (usa el constructor no-args de la clase base no serializable más derivada).
  • A través de Object.clone ( no llama a un constructor ).
  • A través de JNI (debería llamar a un constructor).
  • A través de cualquier otro método que llame new para ti.
  • Supongo que podrías describir la carga de clases como la creación de nuevos objetos (como String s internados).
  • Una matriz literal como parte de la inicialización en una declaración (sin constructor para matrices).
  • La matriz en una llamada al método "varargs" ( ... ) (sin constructor para matrices).
  • Concatenación de cadenas constantes de tiempo no de compilación (produce al menos cuatro objetos, en una implementación típica).
  • Causar que el tiempo de ejecución cree y genere una excepción. Por ejemplo throw null; o "".toCharArray()[0] .
  • Ah, y el boxeo de primitivos (a menos que estén en caché), por supuesto.
  • JDK8 debería tener lambdas (clases internas anónimas esencialmente concisas), que se convierten implícitamente en objetos.
  • Para completar (y Paŭlo Ebermann), también hay cierta sintaxis con la new palabra clave.

La reflexión también hará el trabajo por usted.

SomeClass anObj = SomeClass.class.newInstance();

es otra forma de crear una nueva instancia de una clase. En este caso, también tendrá que manejar las excepciones que puedan lanzarse.


Método 1

Usando nueva palabra clave Esta es la forma más común de crear un objeto en Java. Casi el 99% de los objetos se crean de esta manera.

Employee object = new Employee();

Método 2

Usando Class.forName (). Class.forName () le proporciona el objeto de clase, que es útil para la reflexión. Los métodos que tiene este objeto están definidos por Java, no por el programador que escribe la clase. Son lo mismo para todas las clases. Llamar a newInstance () en eso le da una instancia de esa clase (es decir, callingClass.forName ("ExampleClass"). NewInstance () es equivalente a llamar a new ExampleClass ()), en la que puede llamar a los métodos que define la clase, acceder a los campos visibles, etc.

Employee object2 = (Employee) Class.forName(NewEmployee).newInstance();

Class.forName () siempre usará el ClassLoader de la persona que llama, mientras que ClassLoader.loadClass () puede especificar un ClassLoader diferente. Creo que Class.forName inicializa también la clase cargada, mientras que el enfoque ClassLoader.loadClass () no lo hace de inmediato (no se inicializa hasta que se usa por primera vez).

Otro debe leer:

Java: Introducción del estado del hilo con ejemplo Ejemplo simple de Enum de Java

Método 3

Usando clone (). El clon () se puede usar para crear una copia de un objeto existente.

Employee secondObject = new Employee(); Employee object3 = (Employee) secondObject.clone();

Método 4

Usando el método newInstance ()

Object object4 = Employee.class.getClassLoader().loadClass(NewEmployee).newInstance();

Método 5

Usar la deserialización de objetos. La deserialización de objetos no es más que crear un objeto a partir de su forma serializada.

// Create Object5 // create a new file with an ObjectOutputStream FileOutputStream out = new FileOutputStream(""); ObjectOutputStream oout = new ObjectOutputStream(out); // write something in the file oout.writeObject(object3); oout.flush(); // create an ObjectInputStream for the file we created before ObjectInputStream ois = new ObjectInputStream(new FileInputStream("crunchify.txt")); Employee object5 = (Employee) ois.readObject();


Otras formas si estamos siendo exhaustivos.

  • En Oracle JVM es Uasefe.allocateInstance () que crea una instancia sin llamar a un constructor.
  • Usando la manipulación del código de bytes puede agregar código a un anewarray de anewarray , multianewarray , new o new . Estos se pueden agregar utilizando bibliotecas como ASM o BCEL. Una versión de bcel se envía con Java de Oracle. De nuevo, esto no llama a un constructor, pero puede llamar a un constructor como una llamada separada.

Podemos crear un objeto de 5 maneras:

  1. por nuevo operador
  2. por reflexión (p. ej. Class.forName () seguido de Class.newInstance ())
  3. por método de fábrica
  4. por clonación
  5. por reflexión api

Reflexión:

someClass.newInstance();


Sí, puedes crear objetos usando la reflexión. Por ejemplo, String.class.newInstance() le dará un nuevo objeto String vacío.


También podemos crear el objeto de esta manera:

String s ="Hello";

Nadie lo ha discutido.


También puede clonar un objeto existente (si implementa Cloneable).

Foo fooClone = fooOriginal.clone ();


También puedes usar

Object myObj = Class.forName("your.cClass").newInstance();


también hay ClassLoader.loadClass (cadena) pero esto no se usa a menudo.

y si quiere ser un abogado total al respecto, las matrices son técnicamente objetos debido a la propiedad .length de una matriz. así que inicializar una matriz crea un objeto.



  • usando el new operador (invocando así a un constructor)
  • usando reflection clazz.newInstance() (que nuevamente invoca el constructor). O por clazz.getConstructor(..).newInstance(..) (otra vez usando un constructor, pero puedes elegir cuál)

Resumir la respuesta, una forma principal, invocando al constructor de la clase del objeto.

Actualización: Otra respuesta enumerada de dos maneras que no implican el uso de un constructor - deseralización y clonación.