Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में स्टैकवॉकर एपीआई का उपयोग करके विभिन्न स्टैक फ्रेम कैसे प्रिंट करें?


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); स्ट्रीम स्टैकस्ट्रीम =StackWalker.getInstance().walk (एफ -> एफ); System.out.println ("--- सभी स्टैकफ्रेम्स पर चलें ---"); सूची<स्ट्रिंग> ढेर =walkAllStackframes (); System.out.println (ढेर); System.out.println ("--- कुछ StackFrames छोड़ें ---"); सूची<स्ट्रिंग> स्टैक्सआफ्टरस्किप =वॉकसमस्टैकफ्रेम (3); System.out.println (स्टैकआफ्टरस्किप); System.out.println ("---- सीमा StackFrames ---"); सूची<स्ट्रिंग> stacksByLimit =walkLimitStackframes(3); System.out.println(stacksByLimit); } निजी सूची<स्ट्रिंग> walkAllStackframes() { वापसी StackWalker.getInstance().walk (s -> s.map(frame -> "\n" + frame.getClassName() + "/" + frame.getMethodName())।एकत्र करें (कलेक्टर.toList ())); } निजी सूची<स्ट्रिंग> walkSomeStackframes(int numberOfFrames) { वापसी StackWalker.getInstance().walk (s -> s.map(frame -> "\n" + frame.getClassName() + "/" + frame.getMethodName())।छोड़ें (numberOfFrames).एकत्र करें (कलेक्टर.toList ())); } निजी सूची<स्ट्रिंग> walkLimitStackframes(int numberOfFrames) { वापसी StackWalker.getInstance().walk (s -> s.map(frame -> "\n" + frame.getClassName() + "/" + frame.getMethodName())।सीमा (numberOfFrames).एकत्र करें (कलेक्टर.toList ())); } }}

आउटपुट

--- सभी 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 ] 

  1. जावा में प्रिंटफ () विधि का उपयोग करके स्वरूपित पाठ कैसे मुद्रित करें?

    प्रिंटफ () विधि हमें आउटपुट को java.io.PrintStream . में प्रारूपित करने की अनुमति देती है या java.io.PrintWriter . इन कक्षाओं में format() . नामक एक विधि भी शामिल है जो समान परिणाम उत्पन्न कर सकते हैं, इसलिए जो कुछ भी हम यहां printf() . के लिए पढ़ते हैं विधि को format() . पर भी लागू किया जा सकता है

  1. हम जावा में स्टैक का उपयोग करके एक कतार को कैसे लागू कर सकते हैं?

    एक कतार वर्ग संग्रह का विस्तार करता है इंटरफ़ेस और यह सम्मिलित करने का समर्थन करता है और फर्स्ट-इन-फर्स्ट-आउट (FIFO) का उपयोग करके संचालन को हटाता है . एक ढेर वेक्टर . का उपवर्ग है वर्ग और यह लास्ट-इन-फर्स्ट-आउट (LIFO) . का प्रतिनिधित्व करता है वस्तुओं का ढेर। स्टैक के शीर्ष पर जोड़ा गया अंतिम त

  1. जावा में क्यू का उपयोग करके हम स्टैक को कैसे कार्यान्वित कर सकते हैं?

    एक ढेर वेक्टर . का उपवर्ग है वर्ग और यह lएस्ट-इन-फर्स्ट-आउट (LIFO) . का प्रतिनिधित्व करता है वस्तुओं का ढेर। स्टैक के शीर्ष पर जोड़ा गया अंतिम तत्व (इन) स्टैक से निकाला जाने वाला (आउट) पहला तत्व हो सकता है। एक कतार वर्ग संग्रह का विस्तार करता है इंटरफ़ेस और यह सम्मिलित करें . का समर्थन करता है