El orden de carga de archivos de clase
1. Primero cargue las variables estáticas y los bloques de inicialización estática de la clase principal (el orden de ejecución está organizado en orden)
2. Recargar las variables estáticas y los bloques de inicialización estática que ejecutan esta clase
Mientras la clase no se destruya, las variables estáticas y el bloque de inicialización estática solo se ejecutarán una vez, y estos dos pasos no se realizarán más en la operación posterior de la clase.
Proceso de creación de instancias de clase
Se crea una instancia de la clase solo cuando se llama al nuevo método.
1. En el orden de carga del archivo de clase anterior (omita este paso si se ha cargado la clase)
2. Variables no estáticas y bloques de inicialización no estatales de la clase principal
3. El método de construcción de la clase principal
4. Variables no estáticas y bloques de inicialización no estatales de esta clase
5. El método de construcción de esta clase
4. Al destruir una instancia de clase, primero destruya la parte de la subclase y luego destruya la parte de la clase principal.
Tanto los métodos estáticos como los métodos no estatales se llaman pasivamente
Es decir, el sistema no llamará y se ejecutará automáticamente. Por lo tanto, el usuario no lo ejecuta cuando no se llama. La principal diferencia es que los métodos estáticos se pueden llamar directamente con el nombre de clase (y también se pueden hacer objetos de instanciación), mientras que los métodos no estatales solo pueden llamarse después de instanciar el objeto.
Conceptos relacionados
Palabra clave estática:
es un modificador utilizado para modificar miembros (variables de miembros y funciones de miembros)
Los miembros modificados tienen las siguientes características:
Carga A medida que se carga la clase (tan pronto como se cargue la clase, los datos estáticos cargarán inmediatamente el espacio en la memoria)
Desaparece a medida que la clase desaparece, lo que indica que tiene el ciclo de vida más largo
Preferentemente sobre la existencia del objeto (el objeto desaparece, la estática sigue ahí)
Existencia estática Primero, el objeto existe más tarde
Compartido por todos los objetos
Guardar espacio de memoria
Cuando un miembro se modifica estáticamente, además de ser llamado por el objeto, también se puede llamar directamente por el nombre de la clase.
Escritura: nombre de clase. Miembro estático
Notas sobre el uso
Los métodos estáticos solo pueden acceder a miembros estáticos (métodos y variables)
Los métodos no estáticos pueden acceder tanto a estáticos como a la no estática
Esta y las palabras clave súper no se pueden escribir en métodos estáticos.
Porque la precedencia estática sobre el objeto, esto no puede aparecer en los métodos estáticos
La función principal es estática
PublicStaticVoidmain (String [] args) {}
¿Cuándo usar estática?
Necesitamos comenzar desde dos aspectos: porque el contenido de la modificación estática incluye variables y funciones de miembros.
Cuándo definir una variable estática (variable de clase)
Cuando aparecen datos compartidos en el objeto, los datos se modifican estáticamente. Los datos únicos en el objeto deben definirse como no estadísticas existentes en la memoria Heap.
Cuándo definir una función estática
Cuando no se accede internamente a datos no estáticos (datos específicos de objetos), la función se puede definir como estática.
Pros y contras estáticos
ganancia:
1. Almacene datos compartidos en espacios separados para objetos, guardando espacio. No hay necesidad de almacenar una copia de cada objeto.
2. Puede llamarse directamente por nombres de clases
Desventajas:
1. El ciclo de vida es demasiado largo
2. Se producen limitaciones de acceso (solo acceso estático)
Estructura de memoria
Cuando los programas Java se están ejecutando, deben asignar espacio en la memoria. Para mejorar la eficiencia informática, se han dividido diferentes áreas del espacio, porque cada área tiene un método de procesamiento de datos específico y un método de gestión de memoria.
Memoria de acumulación
Utilizado para almacenar variables locales cuando se usan los datos, el espacio ocupado se liberará automáticamente.
Memoria de montón
Matrices y objetos (entidades), las instancias creadas a través de nuevas se almacenan en la memoria de almacenamiento (las variables miembros se establecen con el establecimiento del objeto y existen en la memoria de montón donde se encuentra el objeto). Cada entidad tiene un valor de dirección de memoria (la dirección se hace referencia a las variables). Las variables en la entidad tienen valores de inicialización predeterminados. La entidad ya no se usa y será reciclada por el recolector de basura en un tiempo incierto (mecanismo de recolección de basura)
Área de método, área de método local, registrarse
verificar
| Orden de carga | Variable estática de clase principal = 1 | Variable no estática de clase principal = 1 | Variable estática de subclase = 1 | Variable no estática de subclase = 1 |
|---|---|---|---|---|
| [La clase principal llama al método estático de la clase principal] | Parent.pstaticMethod (); | |||
| Bloque de inicialización estática de clase principal uno | 2 | |||
| Bloque de inicialización estática de clase principal dos | 3 | |||
| Método estático de clase principal | 4 | |||
| [Subclase Llama a los métodos estáticos de subclase] | Child.cstaticMethod (); | |||
| Subclase Bloque de inicialización estática uno | 5 | 2 | ||
| Subclase Bloque de inicialización estática dos | 6 | 3 | ||
| Métodos estáticos de subclase | 7 | 4 | ||
| 【Instanciación de subclase】 | Niño C = nuevo niño (); | |||
| La clase principal es un bloque de inicialización no estático uno | 8 | 2 | ||
| El bloque de inicialización no estática de la clase principal dos | 9 | 3 | ||
| Constructor de clase matriz | 10 | 4 | ||
| Subclase Bloque de inicialización no estática Uno | 11 | 5 | 5 | 2 |
| Subclase Bloque de inicialización no estática dos | 12 | 6 | 6 | 3 |
| Método de construcción de subclase | 13 | 7 | 7 | 4 |
| 【La clase principal instancia el objeto de subclase】 | Padre p = nuevo niño (); | |||
| La clase principal es un bloque de inicialización no estático uno | 14 | 2 | ||
| El bloque de inicialización no estática de la clase principal dos | 15 | 3 | ||
| Constructor de clase matriz | 16 | 4 | ||
| Subclase Bloque de inicialización no estática Uno | 17 | 5 | 8 | 2 |
| Subclase Bloque de inicialización no estática dos | 18 | 6 | 9 | 3 |
| Método de construcción de subclase | 19 | 7 | 10 | 4 |
| Orden de carga | Variable estática de clase principal = 1 | Variable no estática de clase principal = 1 | Variable estática de subclase = 1 | Variable no estática de subclase = 1 |
|---|---|---|---|---|
| 【Instanciación de subclase】 | Niño C = nuevo niño (); | |||
| Bloque de inicialización estática de clase principal uno | 2 | |||
| Bloque de inicialización estática de clase principal dos | 3 | |||
| Subclase Bloque de inicialización estática uno | 4 | 2 | ||
| Subclase Bloque de inicialización estática dos | 5 | 3 | ||
| La clase principal es un bloque de inicialización no estático uno | 6 | 2 | ||
| El bloque de inicialización no estática de la clase principal dos | 7 | 3 | ||
| Constructor de clase matriz | 8 | 4 | ||
| Subclase Bloque de inicialización no estática Uno | 9 | 5 | 4 | 2 |
| Subclase Bloque de inicialización no estática dos | 10 | 6 | 5 | 3 |
| Método de construcción de subclase | 11 | 7 | 6 | 4 |
| 【La clase principal instancia el objeto de subclase】 | Padre p = nuevo niño (); | |||
| La clase principal es un bloque de inicialización no estático uno | 12 | 2 | ||
| El bloque de inicialización no estática de la clase principal dos | 13 | 3 | ||
| Constructor de clase matriz | 14 | 4 | ||
| Subclase Bloque de inicialización no estática Uno | 15 | 5 | 7 | 2 |
| Subclase Bloque de inicialización no estática dos | 16 | 6 | 8 | 3 |
| Método de construcción de subclase | 17 | 7 | 9 | 4 |
| [La clase principal llama al método estático de la clase principal] | Parent.pstaticMethod (); | |||
| Método estático de clase principal | 18 | |||
| [Subclase Llama a los métodos estáticos de subclase] | Child.cstaticMethod (); | |||
| Métodos estáticos de subclase | 19 | 10 |
public class Classtest {public static void main (String args []) {System.out.println ("【Instanciación de subclase】 | Child C = New Child ();"); Niño C = nuevo niño (); System.out.println ("【La clase premium instancia el objeto de subclase】 | parent p = new Child ();"); Padre p = nuevo niño (); System.out.println ("[La clase premium llama al método estático de clase principal] | parent.pstaticMethod ();"); Parent.pstaticMethod (); System.out.println ("[Subclase llama método estático de subclase] | Child.cstaticMethod ();"); Child.cstaticMethod (); }} public class ClasStest2 {public static void main (String args []) {System.out.println ("[Método de clase de clase President Class Método estático] | Parent.pstaticMethod ();"); Parent.pstaticMethod (); System.out.println ("[Método estático de subclase subclase] | Child.cstaticMethod ();"); Child.cstaticMethod (); System.out.println ("[Instanciación de subclase] | Child C = New Child ();"); Niño C = nuevo niño (); System.out.println ("【La clase principal instancia el objeto de clase infantil】 | parent p = new Child ();"); Padre p = nuevo niño (); }} CLASE PUBLICA PARADA {// CLASE PADRA Variable estática estática int m = 1; // Variable no estática de clase principal int n = 1; // Declaración estática Bloque 1 estática {M ++; // j ++; La variable no estática de clase principal no se puede usar en el sistema de bloque de instrucción estática.out.println ("Bloque de inicialización estática de clase preparatoria 1 |" + M); } // Declaración estática Bloque 2 estática {M ++; System.out.println ("Bloque de inicialización estática de clase preparatoria 2 |" + M); } // constructor public parent () {m ++; n ++; System.out.println ("Constructor de clase preparado |" + m + "|" + n); } // bloque de instrucción no estático {m ++; n ++; System.out.println ("Clase presidenta Bloque de inicialización no estática 1 |" + M + "|" + N); } // bloque de instrucción no estático {m ++; n ++; System.out.println ("Clase Presidente Bloque de inicialización no estática 2 |" + M + "|" + N); } // Método no estático public void pmethod () {m ++; n ++; System.out.println ("Método no estático de clase presidente |" + M + "|" + n); devolver; } // método estático público void static pstaticMethod () {m ++; // j ++; La variable no estática de clase principal no se puede utilizar en métodos estáticos System.out.println ("Método estático presidente |" + M); devolver; } @Override Proteged void finalize () lanza lanzable {super.finalize (); System.out.println ("Destruir la clase principal |"); }} Public Class Child extiende Parent {// Variable estática estática int i = 1; // variable no estática int j = 1; // Declaración estática Bloque 1 estática {M ++; i ++; // j ++; Las variables no estáticas no se pueden usar en el sistema de bloque de declaración estática. } // Declaración estática Bloque 2 estática {M ++; i ++; System.out.println ("Bloque de inicialización estática de subclase 2" + "|" + M + "||" + I); } // constructor public child () {m ++; n ++; i ++; j ++; System.out.println ("Constructor de subclase" + "|" + M + "|" + n + "|" + i + "|" + j); } // bloque de instrucción no estático {m ++; n ++; i ++; j ++; System.out.println ("Subclase Bloque de inicialización no estática Uno" + "|" + M + "|" + N + "|" + I + "|" + J); } // bloque de instrucción no estático {m ++; n ++; i ++; j ++; System.out.println ("Bloque de inicialización no estática de subclase dos" + "|" + m + "|" + n + "|" + i + "|" + j); } // Método no estático public void pmethod () {m ++; n ++; i ++; j ++; System.out.println ("Subclase hereda los métodos no estáticos" + "|" + M + "|" + n + "|" + i + "|" + j); devolver; } // método estático público void static pstaticMethod () {// El método estático no se puede heredar m ++; i ++; // j ++; Las variables no estáticas no se pueden usar en métodos estáticos; } // método no estático public void cmethod () {m ++; n ++; i ++; j ++; System.out.println ("Método no estático de subclase" + "|" + m + "|" + n + "|" + i + "|" + j); devolver; } // método estático público void static cstaticMethod () {m ++; i ++; // j ++; Las variables no estáticas no se pueden usar en métodos estáticos System.out.println ("Método estático de subclase" + "|" + M + "||" + i); devolver; } @Override Proteged void finalize () lanza lanzable {super.finalize (); System.out.println ("Destruir subclase |"); }}Resumir
Lo anterior es todo el contenido de este artículo sobre el análisis exhaustivo del proceso de carga de clase en Java. Espero que sea útil para todos. Si tiene alguna pregunta, puede dejar un mensaje en cualquier momento y el editor responderá a todos a tiempo. Esperamos sus valiosos comentarios.