L'ordre de chargement des fichiers de classe
1. Chargez d'abord les variables statiques et les blocs d'initialisation statiques de la classe parent (l'ordre d'exécution est organisé dans l'ordre)
2. Recharger les variables statiques et les blocs d'initialisation statiques qui exécutent cette classe
Tant que la classe n'est pas détruite, les variables statiques et le bloc d'initialisation statique ne seront exécutés qu'une seule fois, et ces deux étapes ne seront pas effectuées plus loin dans le fonctionnement ultérieur de la classe.
Processus de création d'instance de classe
Une instance de la classe n'est créée que lorsque la nouvelle méthode est appelée.
1. Dans l'ordre de chargement du fichier de classe ci-dessus (sautez cette étape si la classe a été chargée)
2. Variables non statiques et blocs d'initialisation non statiques de la classe parent
3. La méthode de construction de la classe parentale
4. Variables non statiques et blocs d'initialisation non statiques de cette classe
5. La méthode de construction de cette classe
4. Lors de la destruction d'une instance de classe, détruisez d'abord la partie de la sous-classe, puis détruisez la partie de la classe parent.
Les méthodes statiques et les méthodes non statiques sont appelées passivement
C'est-à-dire que le système n'appellera pas et ne s'exécutera pas automatiquement. Par conséquent, l'utilisateur ne l'exécute pas lorsqu'il n'est pas appelé. La principale différence est que les méthodes statiques peuvent être appelées directement avec le nom de classe (et les objets d'instanciation peuvent également être faits), tandis que les méthodes non statiques ne peuvent être appelées qu'après instanciation de l'objet.
Concepts connexes
Mot-clé statique:
est un modificateur utilisé pour modifier les membres (variables membres et fonctions membres)
Les membres modifiés ont les caractéristiques suivantes:
Chargez à mesure que la classe est chargée (dès que la classe est chargée, les données statiques chargent immédiatement l'espace en mémoire)
Disparaît à mesure que la classe disparaît, indiquant qu'il a le cycle de vie le plus long
Préférentiellement à l'existence de l'objet (l'objet disparaît, statique est toujours là)
Existence statique D'abord, l'objet existe plus tard
Partagé par tous les objets
Enregistrer l'espace mémoire
Lorsqu'un membre est modifié statiquement, en plus d'être appelé par l'objet, il peut également être appelé directement par le nom de la classe.
Écriture: nom de classe. Membre statique
Notes sur l'utilisation
Les méthodes statiques ne peuvent accéder qu'à des membres statiques (méthodes et variables)
Les méthodes non statiques peuvent accéder à la fois statique et non statique
Ce mot et super les mots clés ne peuvent pas être écrits en méthodes statiques
Parce que la priorité statique sur l'objet, cela ne peut pas apparaître dans les méthodes statiques
La fonction principale est statique
publicStaticVoidMain (String [] args) {}
Quand utiliser statique?
Nous devons commencer à partir de deux aspects: car le contenu de la modification statique inclut les variables et les fonctions des membres.
Quand définir une variable statique (variable de classe)
Lorsque des données partagées apparaissent dans l'objet, les données sont modifiées statiquement. Les données uniques de l'objet doivent être définies comme existantes non stades dans la mémoire du tas.
Quand définir une fonction statique
Lorsque des données non statiques (données spécifiques à l'objet) ne sont pas accessibles en interne, la fonction peut être définie comme statique.
Avantages et inconvénients statiques
profit:
1. Stockez les données partagées dans des espaces séparés pour les objets, enregistrer l'espace. Il n'est pas nécessaire de stocker une copie de chaque objet.
2. Peut être appelé directement par les noms de classe
Inconvénients:
1. Le cycle de vie est trop long
2. Des limitations d'accès se produisent (seul accès statique)
Structure de mémoire
Lorsque les programmes Java sont en cours d'exécution, ils doivent allouer de l'espace en mémoire. Afin d'améliorer l'efficacité informatique, différentes zones de l'espace ont été divisées, car chaque zone a une méthode de traitement des données spécifique et une méthode de gestion de la mémoire.
Empiler la mémoire
Utilisé pour stocker les variables locales lorsque les données sont utilisées, l'espace occupé sera automatiquement libéré.
Mémoire de tas
Les tableaux et objets (entités), les instances créées à travers les nouvelles sont stockées dans la mémoire du tas (les variables membres sont établies avec l'établissement de l'objet et existent dans la mémoire du tas où l'objet est situé). Chaque entité a une valeur d'adresse mémoire (les variables sont référencées par adresse). Les variables de l'entité ont des valeurs d'initialisation par défaut. L'entité n'est plus utilisée et sera recyclée par le collecteur des ordures dans un délai incertain (mécanisme de collecte des ordures)
Zone de méthode, zone de méthode locale, enregistrement
vérifier
| Commande de chargement | Classe parent variable statique = 1 | Classe parent variable non statique = 1 | Variable statique de sous-classe = 1 | Sous-classe variable non statique = 1 |
|---|---|---|---|---|
| [La classe parent appelle la méthode statique de la classe parent] | Parent.pstatingMethod (); | |||
| Classe de parent Static Initialisation Block One | 2 | |||
| Classe de parent Static Initialisation Block Two | 3 | |||
| Méthode statique de la classe parentale | 4 | |||
| [Sous-classe Appels Sous-classe Méthodes statiques] | Child.cstatingMethod (); | |||
| Sous-classe Bloc d'initialisation statique un | 5 | 2 | ||
| Sous-classe Bloque d'initialisation statique deux | 6 | 3 | ||
| Méthodes statiques de sous-classe | 7 | 4 | ||
| 【Instanciation de la sous-classe】 | Enfant C = nouveau enfant (); | |||
| La classe parent est un bloc d'initialisation non statique | 8 | 2 | ||
| La classe parental d'initialisation non statique Bloque deux | 9 | 3 | ||
| Constructeur de classe parent | 10 | 4 | ||
| Sous-classe Bloc d'initialisation non statique un | 11 | 5 | 5 | 2 |
| Sous-classe Bloque d'initialisation non statique deux | 12 | 6 | 6 | 3 |
| Méthode de construction de sous-classe | 13 | 7 | 7 | 4 |
| 【Classe parent instancie l'instance objet de sous-classe】 | Parent p = new child (); | |||
| La classe parent est un bloc d'initialisation non statique | 14 | 2 | ||
| La classe parental d'initialisation non statique Bloque deux | 15 | 3 | ||
| Constructeur de classe parent | 16 | 4 | ||
| Sous-classe Bloc d'initialisation non statique un | 17 | 5 | 8 | 2 |
| Sous-classe Bloque d'initialisation non statique deux | 18 | 6 | 9 | 3 |
| Méthode de construction de sous-classe | 19 | 7 | 10 | 4 |
| Commande de chargement | Classe parent variable statique = 1 | Classe parent variable non statique = 1 | Variable statique de sous-classe = 1 | Sous-classe variable non statique = 1 |
|---|---|---|---|---|
| 【Instanciation de la sous-classe】 | Enfant C = nouveau enfant (); | |||
| Classe de parent Static Initialisation Block One | 2 | |||
| Classe de parent Static Initialisation Block Two | 3 | |||
| Sous-classe Bloc d'initialisation statique un | 4 | 2 | ||
| Sous-classe Bloque d'initialisation statique deux | 5 | 3 | ||
| La classe parent est un bloc d'initialisation non statique | 6 | 2 | ||
| La classe parental d'initialisation non statique Bloque deux | 7 | 3 | ||
| Constructeur de classe parent | 8 | 4 | ||
| Sous-classe Bloc d'initialisation non statique un | 9 | 5 | 4 | 2 |
| Sous-classe Bloque d'initialisation non statique deux | 10 | 6 | 5 | 3 |
| Méthode de construction de sous-classe | 11 | 7 | 6 | 4 |
| 【Classe parent instancie l'instance objet de sous-classe】 | Parent p = new child (); | |||
| La classe parent est un bloc d'initialisation non statique | 12 | 2 | ||
| La classe parental d'initialisation non statique Bloque deux | 13 | 3 | ||
| Constructeur de classe parent | 14 | 4 | ||
| Sous-classe Bloc d'initialisation non statique un | 15 | 5 | 7 | 2 |
| Sous-classe Bloque d'initialisation non statique deux | 16 | 6 | 8 | 3 |
| Méthode de construction de sous-classe | 17 | 7 | 9 | 4 |
| [La classe parent appelle la méthode statique de la classe parent] | Parent.pstatingMethod (); | |||
| Méthode statique de la classe parentale | 18 | |||
| [Sous-classe Appels Sous-classe Méthodes statiques] | Child.cstatingMethod (); | |||
| Méthodes statiques de sous-classe | 19 | 10 |
classe publique CLASSTEST {public static void main (String args []) {System.out.println ("【Instanciation de la sous-classe】 | enfant c = new Child ();"); Enfant C = nouveau enfant (); System.out.println ("【Premium Class Instanciés Objet sous-classe】 | Parent P = new Child ();"); Parent p = new child (); System.out.println ("[Premium Class appelle la méthode statique de la classe parent] | Parent.pstatingMethod ();"); Parent.pstatingMethod (); System.out.println ("[Sous-classe appelle la méthode statique de la sous-classe] | child.cstaticMethod ();"); Child.cstatingMethod (); }} classe publique CLASSTEST2 {public static void main (String args []) {System.out.println ("[La classe présidentielle appelle la classe Parent Méthode statique] | Parent.pstatingMethod ();"); Parent.pstatingMethod (); System.out.println ("[Méthode statique de sous-classe de sous-classe] | child.cstaticMethod ();"); Child.cstatingMethod (); System.out.println ("[Instanciation de sous-classe] | Child C = new Child ();"); Enfant C = nouveau enfant (); System.out.println ("【Classe parent instancie instancie d'objet de classe enfant】 | parent p = new child ();"); Parent p = new child (); }} classe publique parent {// classe parent variable statique statique int m = 1; // Classe parent variable non statique int n = 1; // Bloc de déclaration statique 1 statique {m ++; // j ++; Classe parent La variable non statique ne peut pas être utilisée dans le bloc de instruction statique System.out.println ("Bloc d'initialisation statique de classe préparante 1 |" + m); } // Bloc de déclaration statique 2 statique {m ++; System.out.println ("Bloc d'initialisation statique de classe préparatoire 2 |" + m); } // Constructor public Parent () {m ++; n ++; System.out.println ("Constructeur de classe préparatoire |" + m + "|" + n); } // Bloc de déclaration non statique {m ++; n ++; System.out.println ("Bloc d'initialisation non statique de classe Présidente 1 |" + m + "|" + n); } // Bloc de déclaration non statique {m ++; n ++; System.out.println ("Bloc d'initialisation non statique de classe Présidente 2 |" + m + "|" + n); } // Méthode non statique public void pmeThod () {m ++; n ++; System.out.println ("Méthode non statique de classe présidente |" + m + "|" + n); retour; } // Méthode statique public static void pStaticMethod () {m ++; // j ++; La variable non statique de la classe parent ne peut pas être utilisée dans les méthodes statiques System.out.println ("méthode statique présidentielle |" + m); retour; } @Override Protected void finalize () lève lanceable {super.Finalize (); System.out.println ("Détruisez la classe parent |"); }} La classe publique Child étend le parent {// variable statique statique int i = 1; // variable non statique int j = 1; // Bloc de déclaration statique 1 statique {m ++; i ++; // j ++; Les variables non statiques ne peuvent pas être utilisées dans le bloc de instruction statique System.out.println ("Bloc d'initialisation statique de sous-classe 1" + "|" + m + "||" + i); } // Bloc de déclaration statique 2 statique {m ++; i ++; System.out.println ("Sous-classe Initialisation statique Bloc 2" + "|" + M + "||" + i); } // Constructor public Child () {m ++; n ++; i ++; j ++; System.out.println ("Constructeur de sous-classe" + "|" + m + "|" + n + "|" + i + "|" + j); } // Bloc de déclaration non statique {m ++; n ++; i ++; j ++; System.out.println ("sous-classe Bloc d'initialisation non statique un" + "|" + m + "|" + n + "|" + i + "|" + j); } // Bloc de déclaration non statique {m ++; n ++; i ++; j ++; System.out.println ("Sous-classe Bloque d'initialisation non statique deux" + "|" + m + "|" + n + "|" + i + "|" + j); } // Méthode non statique public void pmeThod () {m ++; n ++; i ++; j ++; System.out.println ("Sous-classe hérite des méthodes non statiques" + "|" + m + "|" + n + "|" + i + "|" + j); retour; } // Méthode statique public static void pstaticMethod () {// La méthode statique ne peut pas être héritée m ++; i ++; // j ++; Les variables non statiques ne peuvent pas être utilisées dans les méthodes statiques; } // Méthode non statique public void cMethod () {m ++; n ++; i ++; j ++; System.out.println ("Méthode non statique de sous-classe" + "|" + m + "|" + n + "|" + i + "|" + j); retour; } // Méthode statique public static void cStaticMethod () {m ++; i ++; // j ++; Les variables non statiques ne peuvent pas être utilisées dans les méthodes statiques System.out.println ("Méthode statique de sous-classe" + "|" + m + "||" + i); retour; } @Override Protected void finalize () lance Throwsable {super.Finalize (); System.out.println ("Détruire la sous-classe |"); }}Résumer
Ce qui précède est tout le contenu de cet article sur l'analyse complète du processus de chargement de classe en Java. J'espère que ce sera utile à tout le monde. Si vous avez des questions, vous pouvez laisser un message à tout moment et l'éditeur répondra à tout le monde à temps. Dans l'attente de vos précieux commentaires.