Bloques estáticos en Java

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);
    }
}
Producción

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();
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *