Maison > Java > javaDidacticiel > le corps du texte

Donner un exemple de l'ordre d'exécution des blocs de code en Java

高洛峰
Libérer: 2017-01-18 15:08:13
original
1281 Les gens l'ont consulté

Avant-propos
Aujourd'hui, alors que je regardais l'implémentation d'Android ContentProvider, j'ai soudainement pensé à l'ordre d'exécution des domaines statiques, des blocs statiques, des domaines non statiques, des blocs non statiques et des constructeurs dans le nouveau processus de Cours Java. En fait, il s’agit d’une question très classique, qui teste la maîtrise des connaissances de base de Java. Je pense qu'il y a beaucoup de questions comme celle-ci pendant le processus d'entretien, alors profitez du temps du week-end pour les examiner.

Conclusion
Ici, je vais d'abord vous donner la conclusion compilée, puis j'écrirai un programme pour vérifier notre conclusion. Lorsqu'une classe Java est nouvelle, la séquence d'exécution est la suivante :

Implémentez ses propres attributs statiques et blocs de code statiques. (Déterminez qui s'exécute en premier en fonction de l'ordre dans lequel le code apparaît)

Implémentez vos propres attributs non statiques et blocs de code non statiques.

Exécuter son propre constructeur.

Dans le processus d'implémentation de la classe héritée pour qu'elle soit nouvelle, la séquence d'exécution de l'initialisation est la suivante :

Implémentez les propriétés statiques publiques et le code statique au niveau du bloc de la classe parent.

Implémentez vos propres propriétés statiques et votre code statique au niveau du bloc.

Implémentez les propriétés non statiques et les blocs de code non statiques de la classe parent.

Exécutez le constructeur de la classe parent.

Implémentez vos propres propriétés non statiques et blocs de code non statiques.

Exécuter son propre constructeur.

Ici, nous devons introduire brièvement les blocs de code statiques et les blocs de code non statiques.
1. Bloc de code statique :

statique {
}

2. Bloc de code non statique

{
}

Les similitudes et les différences entre les blocs de code statiques et les blocs de code non statiques sont les suivantes :

Similitudes : Ils sont tous deux exécutés lorsque la JVM charge la classe et avant l'exécution du constructeur. Plusieurs définitions peuvent être exécutées. être défini dans la classe, généralement dans Certaines variables statiques se voient attribuer des valeurs dans le bloc de code.

Différence : le bloc de code statique est exécuté avant le bloc de code non statique (bloc de code statique > bloc de code non statique). Le bloc de code statique n'est exécuté qu'une seule fois lorsqu'il est nouveau pour la première fois, et ne sera plus exécuté par la suite. Les blocs de code non statiques sont exécutés à chaque fois qu'ils sont nouveaux.


Vérification
La meilleure vérification de la conclusion est d'écrire le code pour prouver les résultats. Tout d'abord, jetons un œil à la séquence d'exécution lors de l'initialisation d'une classe sans héritage. Le code est le suivant :

public class InitOderTest { 
  public static String STATIC_FIELD = "静态属性"; 
    
  // 静态块 
  static { 
    System.out.println(STATIC_FIELD); 
    System.out.println("静态代码块"); 
  } 
    
  public String field = "非静态属性"; 
    
  // 非静态块 
  { 
    System.out.println(field); 
    System.out.println("非静态代码块"); 
  } 
  
  public InitOderTest() { 
    System.out.println("无参构造函数"); 
  } 
    
  public static void main(String[] args) { 
    InitOderTest test = new InitOderTest(); 
  } 
}
Copier après la connexion

Résultats de l'exécution :

Attributs statiques

Bloc de code statique

Propriétés non statiques

Bloc de code non statique

Constructeur sans argument

Ensuite, vérifions que lorsque le Java la classe implémente l'héritage, exécute La séquence correspond-elle à nos conclusions ? Le code du test est le suivant :

class ParentTest { 
   public static String PARENT_STATIC_FIELD = "父类-静态属性"; 
   
   // 父类-静态块 
   static { 
     System.out.println(PARENT_STATIC_FIELD); 
     System.out.println("父类-静态代码块"); 
   } 
   
   public static String parentField = "父类-非静态属性"; 
   
   // 父类-非静态块 
   { 
     System.out.println(parentField); 
     System.out.println("父类-非静态代码块"); 
   } 
   
   public ParentTest() { 
     System.out.println("父类—无参构造函数"); 
   } 
 } 
   
 public class InitOderTest extends ParentTest { 
   public static String STATIC_FIELD = "静态属性"; 
   
   // 静态块 
   static { 
     System.out.println(STATIC_FIELD); 
     System.out.println("静态代码块"); 
   } 
   
   public String field = "非静态属性"; 
   
   // 非静态块 
   { 
     System.out.println(field); 
     System.out.println("非静态代码块"); 
   } 
   
   public InitOderTest() { 
     System.out.println("无参构造函数"); 
   } 
   
   public static void main(String[] args) { 
     InitOderTest test = new InitOderTest(); 
   } 
 }
Copier après la connexion

Les résultats d'exécution sont les suivants :

Classe Parent - propriétés statiques

Classe Parent - bloc de code statique

Propriétés statiques

Bloc de code statique

Classe parent - propriétés non statiques

Classe parent - bloc de code non statique

Classe parent - non -Constructeur d'arguments

Propriétés non statiques

Blocs de code non statiques

Constructeur sans argument

Pour plus d'exemples d'ordre d'exécution des blocs de code en Java, veuillez faire attention au site Web PHP chinois pour les articles connexes !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal