Java 9 एक StackWalker . को परिभाषित करता है एपीआई जो आलस्य और फ्रेम फ़िल्टरिंग प्रदान करता है। StackWalker . का एक ऑब्जेक्ट हमें स्टैक को पार करने और एक्सेस करने की अनुमति देता है और इसमें एक उपयोगी विधि शामिल है:चलना () . यह विधि एक StackFrame . खोलती है स्ट्रीम वर्तमान थ्रेड के लिए, फिर उस StackFrame . के साथ फ़ंक्शन लागू करता है धारा। हमें StackWalker . प्राप्त करने की आवश्यकता है ऑब्जेक्ट, फिर StackWalker.getInstance() . का उपयोग करें विधि।
नीचे दिए गए उदाहरण में, हम अलग-अलग स्टैक फ़्रेम प्रिंट कर सकते हैं:सभी स्टैक फ़्रेम, छोड़ें कुछ स्टैक फ़्रेम और सीमा StackWalker . का उपयोग करके फ़्रेमों को स्टैक करें एपीआई।
उदाहरण
आयात करें ); } निजी शून्य चलना () {नया वाकर1 ()। चलना (); } निजी वर्ग वाकर1 {सार्वजनिक शून्य चलना () {नया वाकर2 ()। चलना (); }} निजी वर्ग वाकर2 {सार्वजनिक शून्य चलना () {विधि 1 (); } शून्य विधि 1 () {विधि 2 (); } शून्य Method2() { StackWalker stackWalker =StackWalker.getInstance (सेट.ऑफ़ (स्टैकवॉकर.ऑप्शन.RETAIN_CLASS_REFERENCE, स्टैकवॉकर.ऑप्शन.SHOW_HIDDEN_FRAMES), 16); स्ट्रीमआउटपुट
--- सभी StackFrames पर चलें ---[StackWalkerTest$Walker2/walkAllStackframes, StackWalkerTest$Walker2/Method2, StackWalkerTest$Walker2/Method1, StackWalkerTest$Walker2/walk, StackWalkerTest$StackWalker1/walk, स्टैकवॉकर टेस्ट/मुख्य ]--- कुछ StackFrames छोड़ें ---[StackWalkerTest$Walker2/walk, StackWalkerTest$Walker1/walk, StackWalkerTest/walk, StackWalkerTest/main ]--- StackFrames को सीमित करें ---[StackWalkerTest$Walker2/walkLimitStackframes,StackWalkerTest$Walker2/Method2, StackWalkerTest$Walker2/Method1 ]