Anshul Kumar:
public class Test15 {
public static void main(String[] args) {
System.out.println(B.x);
}
}
abstract class A {
static int x=99;
A() {
System.out.println("A DC");
}
static {
System.out.println("A SB");
}
}
class B extends A {
static {
System.out.println("B Sb");
}
}
¿Por qué en el programa anterior no se ejecuta el bloque estático clase hija?
Eran :
x
es una static
variable de clase A
, por lo que aunque se accede a él a través B.x
, no hay necesidad de inicializar la clase B
. Por lo tanto, la clase B
's static
no se ejecuta inicializador.
He aquí las pertinentes JLS 12.4.1 cita :
Una referencia a un campo estático (§8.3.1.1) provoca la inicialización de sólo la clase o interfaz que realmente declara que, a pesar de que podría ser referido a través del nombre de una subclase, una subinterfaz, o una clase que implementa una interfaz.