Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

441
Vistas
En Java, ¿cuál es el orden de inicialización de esas declaraciones después del método principal?

Aprendí que el principio para el orden de inicialización es:

  1. Superclase primero (no discutido aquí en este caso)
  2. Declaraciones de variables estáticas y bloques de inicialización estáticos en el orden de aparición
  3. Declaraciones de variables de instancia y bloques de inicialización estáticos en el orden de aparición
  4. el constructor

Pero todavía estoy confundido por la salida de este código:

 public class Test1 { static { add(2); } static void add (int num) { System.out.println(num + " "); } public Test1() { add(5); System.out.println("Constructor!"); } static { add(4); } { add(6); } static { new Test1(); } { add(8); } public static void main(String[] args) { System.out.println("Main method!"); add(10); } { add(11); } static { add(12); } }

El resultado es:

 2 4 6 8 11 5 Constructor! 12 Main method! 10

Si sin las sentencias de add(10); sumar(11); sumar(12); Puedo entender totalmente. ¿Puede explicar el orden de inicialización de esas 3 declaraciones?

about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

El inicializador estático es el primero, por lo que obtienes

 2 4

Pero en el siguiente inicializador estático, llama a una nueva instancia de Test1.class, por lo que se activan los inicializadores de instancia, el constructor se activa después de ellos y obtiene:

 6 8 11 5 Constructor!

Después de eso, se llama al resto de inicializadores estáticos. asi que:

 12

Y el último es el método principal:

 Main method! 10
about 4 years ago · Santiago Trujillo Denunciar

0

1) El bloque que no tiene un nombre como el que se muestra a continuación se llama " Inicializador de instancia ", que solo se llama cuando se crean nuevos objetos, como DefaultConstructor o noArg Constructor.

 { add(11); }

2) En el código anterior, tiene un bloque estático ( que se llama primero en la carga de la clase ), el inicializador de instancia ( que se llama al crear el objeto ), el constructor predeterminado explícito ( que se llama al crear el objeto, pero recuerde siempre El inicializador de instancia tiene prioridad ) y el último método principal.

3) Ahora analicemos tu código,

1ra llamada:

 static { add(2); //print 2 }

2ª llamada:

 static { add(4); // print 4 }

3ra llamada:

 static { new Test1(); // Here Object is getting created so all Instance Initialzer will be called first in a sequential manner. }

4ª llamada:

 { add(6); // print 6 }

5ª llamada:

 { add(8); // print 8 }

6ª convocatoria:

 { add(11); // print 11 }

Séptima llamada: después del inicializador de instancia, se llamará al constructor predeterminado explícito.

 public Test1() { add(5); // print 5 System.out.println("Constructor!"); // print Constructor! }

8ª llamada: Nuevamente se llamará al último bloque estático.

 static { add(12); // print 12 }

9ª llamada: Finalmente se llamará al método principal

 public static void main(String[] args) { System.out.println("Main method!"); // print Main method! add(10); // print 10 }
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que te confundiste porque (12) antes (método principal - 10)

Eso sucede porque el método principal se llama al final, pero el otro orden de inicialización está claro

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda