Maison  >  Article  >  Java  >  Java charge silencieusement un exemple de code pour l'implémentation de la classe

Java charge silencieusement un exemple de code pour l'implémentation de la classe

黄舟
黄舟original
2017-10-18 10:23:331661parcourir

Cet article vous présente principalement les informations pertinentes sur l'implémentation Java du chargement silencieux de la classe. L'article le présente en détail à travers un exemple de code. Il a une certaine valeur d'apprentissage de référence pour que tous ceux qui en ont besoin apprennent ou utilisent Java. suivez ci-dessous Apprenons ensemble.

Avant-propos

Cet article présente principalement le contenu pertinent sur le chargement silencieux de Java La raison de cet article est que parfois pendant le développement, nous Nous avons un scénario dans lequel nous souhaitons uniquement obtenir les informations de base d'une classe, mais ne souhaitons pas déclencher les blocs de code statiques pertinents. Cette méthode a été utilisée dans un article précédent sur "JAVA Scanning Package". vous avez un nom professionnel pour cela, veuillez me corriger.

Généralement, lorsque nous chargeons une classe, nous utiliserons la méthode Class.forName(String name), qui renverra un objet Class et déclenchera le bloc de code statique dans la classe. Par exemple :

Écrivons d'abord une classe Bean qui contient uniquement des blocs de code statiques.


package com.jinggujin.classloader;
public class Bean
{
 static
 {
  System.err.println("static code block.");
 }
}
L'utilisation du flux err consiste à générer des informations à temps. L'utilisation de out entraînera une mise en cache, ce qui peut perturber l'ordre des informations de sortie

<.>
Ensuite, écrivez les méthodes de test à tester.


Exécutez et observez la sortie de la console :
package test;

import org.junit.Test;

public class ClassLoaderTest
{
 @Test
 public void test() throws Exception
 {
  Class.forName("com.jinggujin.classloader.Bean");
 }
}


bloc de code statique.

À ce moment, la console Output us Le contenu imprimé dans le bloc de code statique prouve que l'utilisation de

déclenchera le bloc de code statique. Ensuite, pour obtenir un chargement silencieux, nous ne pouvons pas utiliser cette méthode. Nous pouvons utiliser la méthode

de ClassLoader. cette méthode chargera uniquement la classe sans déclencher le bloc de code statique. Écrivez la même méthode de test pour les tests. Class.forName(String name)loadClass(String name)


Exécutez et observez la sortie de la console :
package test;
import org.junit.Test;
public class ClassLoaderTest
{
 @Test
 public void test() throws Exception
 {
  Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("com.jinggujin.classloader.Bean");
  System.err.println(clazz.getName());
 }
}


Nous avons constaté que seul le nom de la classe que nous avons imprimé était affiché dans le informations de la console, et le bloc de code statique n'est pas exécuté. De plus, nous pouvons réellement utiliser la méthode de réécriture
com.jinggujin.classloader.Bean
de

pour obtenir le même effet de chargement silencieux. Class.forName(String name)forName(String name, boolean initialize, ClassLoader loader)

Résumé

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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