Carga de clase
Antes de hablar sobre la inicialización de la clase, expliquemos el orden de carga de la clase.
Lo siguiente se extrae de "Pensar en Java 4"
Dado que todo en Java es un objeto, muchas actividades
Este problema es uno de los ejemplos más simples. Como se mencionará en el próximo capítulo, el código para cada objeto existe en un archivo separado. A menos que se necesite realmente el código, ese archivo no se cargará. En general, podemos pensar que el código en realidad no se cargará a menos que se construya un objeto de esa clase. Debido a que hay alguna ambigüedad sutil en el método estático, también se puede considerar que "el código de clase se carga cuando se usa por primera vez".
La primera vez que lo usa también es donde se produce la inicialización estática. Al cargar, todos los objetos estáticos y bloques de código estático se inicializan en su orden original (es decir, el orden en que se escriben en el código de definición de clase). Por supuesto, los datos estáticos solo se inicializarán una vez.
En pocas palabras, cuando la clase tiene una relación de herencia, el cargador de clase lo dará forma al revés y cargará clases relacionadas.
Por ejemplo:
Clase B extiende la clase A Cuando tenemos un nuevo B (), el cargador de clase carga automáticamente el código de A
Orden de inicialización de la clase
Por lo general, la secuencia de inicialización es la siguiente:
(Objeto estático y bloque de código estático, inicializado en su orden)> Variables de miembro> Constructor
Código de prueba
clase public classInit { / ** * @title: main * @Description: prueba de orden de inicialización de clases * @param: @param args * @return: void * @throws * / public static void main (string [] args) {// todo auto-generado método nuevo b (); }} Clase A {static {System.out.println ("A's Static Code Block ..."); } public String S1 = PrtString ("Variable miembro de A ..."); Cadena estática pública s2 = prtString ("Variable estática de A ..."); public A () {System.out.println ("A's Constructor ..."); } public static string prtString (String str) {System.out.println (str); regresar nulo; }} La clase B extiende una {cadena pública ss1 = prtString ("La variable miembro de B ..."); cadena estática pública ss2 = prtString ("La variable estática de B ..."); public B () {System.out.println ("B's Constructor ..."); } privado estático a a = nuevo a (); static {System.out.println ("Bloque de código estático de B ..."); } {System.out.println ("Bloque de código ..."); }} Resultados de las pruebas
Bloque de código estático de A ...
Variable estática de A ...
La variable estática de B ...
Variables de miembros de un ...
Constructor de A ...
B bloque de código estático de B ...
Variables de miembros de un ...
Constructor de A ...
Variables de miembros de B ...
Bloque de código ...
El constructor de B ...
Resumir
Lo anterior es todo el contenido del orden de inicialización de clase en Java. Espero que sea útil para todos los que usen Java.