
"Szia! Ma elmondom, mi az a veremnyom. De először el kell mondanom, mi az a verem."
"Képzeljen el egy halom papírt – utasításokat egy bizonyos alkalmazotthoz. Új feladatot rakhat a kupac tetejére, vagy átvehet egy feladatot a tetejéről. Ez azt jelenti, hogy a feladatok nem a beérkezés sorrendjében lesznek végrehajtva. . A halomra utoljára helyezett feladat lesz az első végrehajtás. Egy gyűjtemény elemeinek így strukturálása egy verem keletkezik . "
" A Java-nak van erre egy speciális gyűjteménye – Stack . Ez egy olyan gyűjtemény, amely rendelkezik az "elem hozzáadásának" és az "elem elvételének (levételének)" módszereivel. Amint azt már sejtette, az utoljára hozzáadott elem lesz az első elviszik."
– Eléggé egyenesen hangzik.
"Remek. Most elmagyarázom, mi az a veremnyom ."
"Képzeljük el, hogy egy Java programban az A metódus B metódusnak hívja , amely a C metódusnak hívja , ami viszont a D metódusnak hívja. A B metódusból való kilépéshez először ki kell lépnünk a C metódusból , és ehhez először ki kell lépnünk a D metódusból . viselkedése egy halomhoz hasonlít."
– Miért mondod, hogy hasonlít rá?
"Ahhoz, hogy például papírkötegünk közepén valamilyen feladathoz tudjon eljutni, először végre kell hajtania az összes, a tetején heverő feladatot."
– Van némi hasonlóság, de nem vagyok benne biztos, hogy mindent jól értek.
"Nézd. A köteg elemek halmaza. Mint a papírdarabok egy kupacban. Ahhoz, hogy a harmadik papírdarabot felülről levehesd, először el kell venned a másodikat, ehhez pedig az elsőt. mindig tud papírdarabokat rakni és elvenni, de mindig a felső papírt kell először elvenni."
"Ugyanez igaz a függvényhívásokra is. Az A módszer meghívja a B metódust , amely meghívja a C metódust . Az A- ból való kilépéshez először ki kell lépnie B- ből , ehhez pedig ki kell lépnie a C- ből ."
"Várjon. Ha jól értem, amit mond, a köteg fogalma abban áll, hogy "vegye el az utoljára hozzáadott papírt", és "csak a legutóbb megadott módszerből léphet ki". Ez igaz? "
"Igen. A függvényhívások sorozatát "hívási veremnek" vagy egyszerűen csak "veremnek" nevezik. Az utoljára meghívott függvény az első funkció, amely véget ér. Nézzünk egy példát."
Az aktuális hívásverem lekérése és megjelenítése: |
---|
|
Eredmény: |
|
"OK. Mindent értek a függvényhívásokkal kapcsolatban. De mi ez a StackTraceElement?"
"A Java gép nyomon követi az összes függvényhívást. Ehhez van egy speciális gyűjteménye – a verem. Amikor egy függvény hívja a másikat, a Java gép egy új StackTraceElement objektumot helyez a verembe. Amikor egy függvény befejeződik, az elem eltávolításra kerül. a veremből. Ez azt jelenti, hogy a verem mindig naprakész információkat tárol a „függvényhívások veremének” aktuális állapotáról .
"Minden StackTraceElement objektum információt tartalmaz a hívott metódusról. A metódus nevét különösen a getMethodName metódussal kaphatja meg ."
"A fenti példában láthatja, hogyan működik ez:
1) Megkapjuk a hívás veremét.
2) Egy for-each ciklust használunk, hogy végigmenjünk rajta. Remélem, nem felejtette el, mi az.
3) A metódusneveket kiadjuk a System.out fájlba ."
"Lenyűgöző! És nem is túl bonyolult. Köszönöm, Rishi!"
GO TO FULL VERSION