Ilustrar la carga de clases y los bloques estáticos en la herencia de Java

La carga de clase significa leer el archivo .class y almacenar los datos binarios correspondientes en el Área de métodos. Para cada archivo .class , JVM almacenará la información correspondiente en el Área de método. Ahora incorporando herencia en la carga de clases. En la herencia de Java, JVM primero cargará e inicializará la clase principal y luego cargará e inicializará la clase secundaria.

Ejemplo

Java

// Java program to Illustrate Class Loading
 
// Importing input output files
import java.io.*;
 
// Helper class 1
class A {
 
    // First static block of this class
    static
    {
 
        // Print message
        System.out.println(
            "Loading class A 1st static block ");
    }
 
    // Second static block of this class
    static
    {
 
        // Print message
        System.out.println(
            "Loading class A 2nd static block B.c="
            + B.c);
    }
 
    // Third static block of this class
    static
    {
 
        // Print message
        System.out.println(
            "Loading class A 3rd static block ");
    }
 
    static int a = 50;
    A() {}
}
 
// Helper class 2 extending from
// helper class 1
class B extends A {
 
    static
    {
        // Print message
        System.out.println(
            "Loading class B static block A.a=" + A.a);
    }
 
    static int c = 100;
}
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Execution statement in main class
        new B();
    }
}
Producción

Loading class A 1st static block 
Loading class A 2nd static block B.c=0
Loading class A 3rd static block 
Loading class B static block A.a=50

De la salida anterior. se puede decir que la clase principal se carga antes que la clase secundaria y también que la clase secundaria se inicializa después de la clase principal. Uno puede verificar esto ejecutándolo con java -verbose Test.

El bloque estático se ejecutará en el momento de la carga de la clase, por lo tanto, en el momento de la carga de la clase, si queremos realizar alguna actividad, debemos definirla dentro del bloque estático. En la herencia de bloques estáticos, se deben recordar las dos reglas siguientes:

  1. No se puede anular un bloque estático ya que se generará el error de tiempo de compilación no estático.
  2. El bloque no estático no se puede anular como un bloque estático.

El uso del bloque estático en la herencia se muestra a continuación para los escenarios anteriores, ya que el error del compilador que se generará se muestra a continuación para ambos casos individualmente de la siguiente manera:

Caso 1: no se puede anular un bloque estático ya que se generará el error de tiempo de compilación no estático sino

Ejemplo 

Java

// Java Program to illustrate static blocks in inheritance
 
// Importing all input output classes
import java.io.*;
 
// Class 1- Parent Class
class GFG {
 
    // Declaring a static method m1
    public static void m1() {}
}
 
// Class 2 -  child class of GFG
class c extends GFG {
 
    // Declaring a non- static method m1
    public void m1() {}
}

Producción:

Caso 2: el bloque no estático no se puede anular como un bloque estático

Ejemplo

Java

// Java Program to illustrate static blocks in inheritance
 
// Importing all input output classes
import java.io.*;
 
// Class 1 - Parent class
class GFG {
 
    // Declaring a non-static method m1
    public void m1() {}
}
 
// Class 2 - child class of parent
// child class of GFG
class C extends GFG {
 
    // Declaring a static method m1
    public static void m1() {}
}

Producción:

Nota: No se generará ningún error en tiempo de compilación solo y solo si los métodos de clase padre e hijo son estáticos.

Publicación traducida automáticamente

Artículo escrito por mroshanmishra0072 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 *