2012-03-05 13 views

Respuesta

20

la memoria de objeto se asigna, las variables de campo con los valores iniciales se inicializan, y luego el constructor se llama, pero su código se ejecuta después de que el código de constructor de la clase súper objeto.

0

Constructor es lo que prácticamente crea un objeto. Se llama cuando se crea un objeto ejecutando new MyClass() (o su versión parametrizada).

1

El constructor recibe una llamada cuando se crea un nuevo objeto.

NewObject n = new NewObject(); 

public class NewObject { 
    public NewObject() { 
     // do stuff when object created 
    } 
} 

Espero que esto ayude.

+1

Esto realmente no responde a su pregunta. – Thorn

+0

¿Cómo no? – Ocracoke

+0

¿Es antes, durante o después? Otras respuestas intentaron llegar desde ángulos diferentes. La pregunta es sutil, y requiere más que una simple definición de lo que es un constructor. – Thorn

0

Dadas esas opciones, 1. Antes de la creación del objeto.

Después de que el constructor finalice, el objeto ha sido creado.

2

LA JVM primero asignará la memoria para su objeto, luego inicializará todos los campos, luego invocará su constructor.

+0

Hubiera dicho que crear el objeto inicializa los campos. AFAIK, no hay forma de ver un objeto antes después de su creación, pero antes de que se haya iniciado con los valores predeterminados. –

+0

Si usa un depurador, puede ver los campos inicializarse uno por uno. Pero es cierto que, desde el punto de vista de un invocador, no hay forma de verlo y hacer algo al respecto. –

+0

Creo que es una mezcla de terminología. Si se rompe el primer punto al que se llama un constructor, todos los campos serán 'falso',' 0', o 'nulo' No es posible ver un objeto no inicializado como se puede en C o C++ donde todos los campos tienen valores aleatorios (basado en lo que la memoria tenía antes) –

3

Se llama al crear un objeto. La memoria debe reservarse primero para el objeto; de lo contrario, el código del constructor no se podría ejecutar. Entonces mamybe podríamos decir después de la creación del objeto. También tenga en cuenta que el código de inicialización escrito en la clase se llama antes que el código del constructor.

public Ex { 

    int xVal = -1; 
    int yVal; 

    public Ex() { 
     // xVal is already -1. 
     //yVal defaults to 0. 
    } 
} 
5

En el nivel de código de bytes.

  1. Se crea un objeto pero no se inicializa.
  2. El constructor se llama, pasando el objeto como this
  3. El objeto está totalmente construido/creado cuando los rendimientos constructor.

Nota: El constructor en el nivel de código de bytes incluye los valores iniciales para las variables y el código en el constructor de Java. p.

int a = -1; 
int b; 

Constructor() { 
    super(); 
    b = 2; 
} 

es lo mismo que

int a; 
int b; 

Constructor() { 
    super(); 
    a = -1; 
    b = 2; 
} 

También tenga en cuenta: el super() siempre es llamado antes se inicializa cualquier parte de la clase.


En algunas JVM puede crear un objeto sin inicializar con Unsafe.allocateInstance(). Si crea el objeto de esta manera, no puede llamar a un constructor (sin usar JNI), pero puede usar reflexiones para inicializar cada campo.

1

básicamente se llama a los constructores para inicializar los valores de las variables de instancia, excepto el caso de los constructores por defecto.Sin embargo, esta inicialización de las variables de instancia se realiza en 4 pasos (según corresponda):

  1. variables se inicializa con valores predeterminados (INT con 0, caracteres con u \ 0000 etc.)
  2. variables se inicializan con inicialización explícita valora
  3. inicializado con bloques estáticos
  4. constructores son llamados
-1

Cada vez que creamos un objeto mediante el uso de 'nuevo' operario primera tarea es realizada por el nuevo es decir, asigna la memoria para el objeto en montón con apuntando a la variable de referencia en la pila y establece los valores iniciales de los campos del objeto. Luego llama al constructor con 'this' como objeto para inicializarlo de acuerdo con sus requisitos ...

Entonces el constructor siempre se invoca después de la creación del objeto ....

Nota: Cuando ingresa en el constructor para que 'this' esté trabajando significa que su objeto ha sido creado.

+0

Creo que necesita aclarar la 'creación de objetos' en varias partes: asignación de memoria, población de campo, etc. La pregunta en sí es vaga, pero esta respuesta realmente no aclara nada todavía. – JBCP

+0

cuando se ejecuta la llamada al método en el ciclo de vida del hilo? Me refiero a en qué estado ya sea en estado listo para funcionar o en estado de ejecución? – user3066252

+0

La pregunta anterior se refería a objetos en general, no a hilos, por lo que no estoy exactamente seguro de lo que está preguntando. – JBCP

Cuestiones relacionadas