valor que metodo method estático estaticos estatico ejemplo directiva contexto clase atributo java static

metodo - Clases de Java y bloques estáticos.



static method java que es (4)

Además de responder a la pregunta de cómo se ejecuta el código en qué orden, supongo que también quiere saber por qué un bloque estático puede referirse a una variable estática que aún no se ha declarado / ejecutado textualmente.

Mientras que la sección 12.4.2 de JLS explica que los bloques estáticos y la variable estática se ejecutan en el orden textual en que aparecen, la sección 8.3.3 de JLS explica cuándo puede hacer referencia a qué, y puede ver que la condición de The use is not on the left hand side of an assignment; falla, lo que permite que su bloque estático en el segundo ejemplo se refiera a una variable estática que aún no se ha declarado / ejecutado textualmente en orden.

class Hello12 { static int b = 10; static { b = 100; } } class sample { public static void main(String args[]) { System.out.println(Hello12.b); } }

Al ejecutar el código anterior, la salida viene como 100 porque cuando llamé a la clase Hello, el bloque estático se ejecuta primero estableciendo el valor de b en 100 y mostrándolo. Pero cuando escribo este código:

class Hello12 { static { b = 100; } static int b = 10; } class sample { public static void main(String args[]) { System.out.println(Hello12.b); } }

Aquí la salida viene como 10. Espero que la respuesta sea 100 porque una vez que se ejecuta el bloque estático dio a b el valor como 100. así que cuando estaba en main (), llamé a Hello.b debería haber referido a b (= 100) . ¿Cómo se asigna la memoria a b en ambos códigos?


En el "Procedimiento de Inicialización Detallado" para las clases, la Sección 12.4.2 del JLS establece:

A continuación, ejecute los inicializadores de variable de clase y los inicializadores estáticos de la clase, o los inicializadores de campo de la interfaz, en orden textual , como si fueran un solo bloque.

Esto significa que es como si el primer ejemplo fuera:

b = 10; b = 100;

Y el segundo ejemplo fue:

b = 100; b = 10;

La última tarea "gana", explicando su salida.


Las estadísticas se evalúan en el orden en que aparecen en el programa.


Los bloques estáticos y las variables estáticas se inicializan en el orden en que aparecen en la fuente. Si su código es:

class Hello12 { static int b = 10; static { b = 100; } }

El resultado es 100.