En un lenguaje más simple, cada vez que usamos una palabra clave estática y la asociamos a un bloque, ese bloque se denomina bloque estático. A diferencia de C++, Java admite un bloque especial, llamado bloque estático (también llamado cláusula estática) que se puede usar para la inicialización estática de una clase. Este código dentro del bloque estático se ejecuta solo una vez: la primera vez que la clase se carga en la memoria.
¿Llamada de bloque estático en java?
Ahora viene el punto de cómo llamar a este bloque estático. Entonces, para llamar a cualquier bloque estático, no hay una forma específica, ya que el bloque estático se ejecuta automáticamente cuando la clase se carga en la memoria. Consulte la siguiente ilustración para comprender cómo se llama al bloque estático.
Ilustración:
class GFG { // Constructor of this class GFG() {} // Method of this class public static void print() { } static{} public static void main(String[] args) { // Calling of method inside main() GFG geeks = new GFG(); // Calling of constructor inside main() new GFG(); // Calling of static block // Nothing to do here as it is called // automatically as class is loaded in memory } }
Nota: De la ilustración anterior podemos percibir que los bloques estáticos se llaman automáticamente tan pronto como la clase se carga en la memoria y no hay nada que hacer en caso de llamar a métodos y constructores dentro de main().
¿Podemos imprimir algo en la consola sin crear el método main()?
Es una pregunta muy importante desde el punto de vista perceptivo de la entrevista. La respuesta es sí, podemos imprimir si estamos usando JDK versión 1.6 o anterior y si después arrojará un archivo. error.
Ejemplo 1-A: Ejecución en JDK versión 1.6 de Anterior
Java
// Java Program Running on JDK version 1.6 of Previous // Main class class GFG { // Static block static { // Print statement System.out.print( "Static block can be printed without main method"); } }
Producción:
Static block can be printed without main method
Ejemplo 1-B: ejecución en JDK versión 1.6 y posterior
Java
// Java Program Running on JDK version 1.6 and Later // Main class class GFG { // Static block static { // Print statement System.out.print( "Static block can be printed without main method"); } }
Producción:
Ejecución de Bloque Estático
Ejemplo 1:
Java
// Java Program to Illustrate How Static block is Called // Class 1 // Helper class class Test { // Case 1: Static variable static int i; // Case 2: non-static variables int j; // Case 3: Static block // Start of static block static { i = 10; System.out.println("static block called "); } // End of static block } // Class 2 // Main class class GFG { // Main driver method public static void main(String args[]) { // Although we don't have an object of Test, static // block is called because i is being accessed in // following statement. System.out.println(Test.i); } }
static block called 10
Recuerde: los bloques estáticos también se pueden ejecutar antes que los constructores.
Ejemplo 2:
Java
// Java Program to Illustrate Execution of Static Block // Before Constructors // Class 1 // Helper class class Test { // Case 1: Static variable static int i; // Case 2: Non-static variable int j; // Case 3: Static blocks static { i = 10; System.out.println("static block called "); } // Constructor calling Test() { System.out.println("Constructor called"); } } // Class 2 // Main class class GFG { // Main driver method public static void main(String args[]) { // Although we have two objects, static block is // executed only once. Test t1 = new Test(); Test t2 = new Test(); } }
static block called Constructor called Constructor called
Una clase puede tener cualquier cantidad de bloques de inicialización estáticos y pueden aparecer en cualquier parte del cuerpo de la clase. El sistema de tiempo de ejecución garantiza que los bloques de inicialización estáticos se llamen en el orden en que aparecen en el código fuente.
Nota: Usamos Initializer Block en Java si queremos ejecutar un fragmento de código para cada objeto que se ve ampliamente en industrias emprendedoras en desarrollo.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA