Maison > Java > javaDidacticiel > Comment afficher le cadre de réflexion de StackFrame en Java 9 ?

Comment afficher le cadre de réflexion de StackFrame en Java 9 ?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2023-09-04 17:09:03
avant
1107 Les gens l'ont consulté

如何在Java 9中显示StackFrame的反射框架?

fournit une API standard en Java 9, en utilisant la classe java.lang.StackWalker . Cette classe est conçue pour être efficace en permettant un accès paresseux aux cadres de pile. De plus, il existe plusieurs options pour inclure l'implémentation et/ou des cadres de réflexion dans la trace de la pile, ce qui peut être très utile à des fins de débogage. Par exemple, nous ajoutons l'option SHOW_REFLECT_FRAMES lors de la création d'une instance StackWalker afin d'imprimer les frames de la méthode de réflexion.

Dans l'exemple ci-dessous, nous pouvons afficher le cadre de réflexion du StackFrame

Example

import java.lang.StackWalker.Option;
import java.lang.StackWalker.StackFrame;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.stream.Collectors;

public class ReflectionFrameTest {
   public static void main(String args[]) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
      <strong>Method </strong>test1Method = Test1.class.<strong>getDeclaredMethod</strong>("test1", (Class<!--?-->[]) null);
      test1Method.<strong>invoke</strong>(null, (Object[]) null);
   }
}
class Test1 {
   protected static void test1() {
      Test2.test2();
   }
}
class Test2 {
   protected static void test2() {
      <strong>// show reflection methods</strong>
      <strong>List<StackFrame></strong> stack = <strong>StackWalker.getInstance</strong>(Option.<strong>SHOW_REFLECT_FRAMES</strong>).walk((s) -> s.collect(Collectors.toList()));
      for(<strong>StackFrame </strong>frame : stack) {
         System.out.println(frame.<strong>getClassName()</strong> + " " + frame.<strong>getLineNumber()</strong> + " " + frame.<strong>getMethodName()</strong>);
      }
   }
}
Copier après la connexion

Output

<strong>Test2 22 test2
Test1 16 test1
jdk.internal.reflect.NativeMethodAccessorImpl -2 invoke0
jdk.internal.reflect.NativeMethodAccessorImpl 62 invoke
jdk.internal.reflect.DelegatingMethodAccessorImpl 43 invoke
java.lang.reflect.Method 564 invoke
ReflectionFrameTest 11 main</strong>
Copier après la connexion

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 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