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 :
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.
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)
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()); } }
com.jinggujin.classloader.Beande
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!