1. Njupuk tilak tumpukan
Basa pemrograman Java nawakake akeh cara kanggo programmer kanggo entuk informasi babagan apa sing kedadeyan ing program. Lan ora mung tembung.
Contone, sawise C ++ program sing nyawiji, padha dadi siji file gedhe kebak kode mesin, lan kabeh sing kasedhiya kanggo programmer ing runtime alamat pamblokiran memori sing ngemot kode mesin lagi dileksanakake. Ora akeh, ayo ngomong.
Nanging kanggo Jawa, sanajan program wis dikompilasi, kelas tetep kelas, metode lan variabel ora ilang, lan programmer duwe akeh cara kanggo entuk informasi babagan apa sing kedadeyan ing program kasebut.
Tilak tumpukan
Contone, ing titik ing eksekusi program, sampeyan bisa ngerteni kelas lan jeneng metode sing saiki dieksekusi. Lan ora mung siji cara - sampeyan bisa njaluk informasi babagan kabeh chain saka cara telpon saka cara saiki bali menyang cara main()
.
Dhaptar sing kasusun saka cara saiki, lan cara sing nimbali, lan cara sing disebut sing siji, etc.. disebut tilak tumpukan . Sampeyan bisa njaluk karo statement iki:
StackTraceElement[] methods = Thread.currentThread().getStackTrace();
Sampeyan uga bisa nulis minangka rong baris:
Thread current = Thread.currentThread();
StackTraceElement[] methods = current.getStackTrace();
Cara statis currentThread()
saka Thread
kelas ngasilake referensi menyang Thread
obyek, sing ngemot informasi babagan thread saiki, yaiku thread eksekusi saiki. Sampeyan bakal sinau luwih lengkap babagan utas ing Level 17 lan 18 saka pencarian Java Core .
Obyek iki Thread
nduweni getStackTrace()
metode, sing ngasilake macem-macem StackTraceElement
obyek, sing saben ngemot informasi babagan metode. Digabungake, kabeh unsur kasebut mbentuk jejak tumpukan .
Tuladha:
Kode |
---|
|
Output konsol |
|
Kaya sing bisa dideleng ing conto output konsol, getStackTrace()
metode kasebut ngasilake telung unsur:
getStackTrace()
metodeThread
kelastest()
metodeMain
kelasmain()
metodeMain
kelas
Saka jejak tumpukan iki, kita bisa nyimpulake yen:
- Cara kasebut
Thread.getStackTrace()
diaraniMain.test()
metode ing baris 11 file Main.java - Cara kasebut
Main.test()
diaraniMain.main()
metode ing baris 5 file Main.java - Ora ana sing nyebut
Main.main()
cara kasebut - iki minangka cara pertama ing rantai telpon.
Miturut cara, mung sawetara informasi sing kasedhiya ditampilake ing layar. Kabeh liya bisa dipikolehi langsung saka StackTraceElement
obyek kasebut
2.StackTraceElement
Minangka jeneng tabet, StackTraceElement
kelas digawe kanggo nyimpen informasi bab unsur tilak tumpukan , IE siji cara ing stack trace
.
Kelas iki nduweni metode conto ing ngisor iki:
Metode | Katrangan |
---|---|
|
Ngasilake jeneng kelas |
|
Ngasilake jeneng metode |
|
Ngasilake jeneng file (siji file bisa ngemot pirang-pirang kelas) |
|
Ngasilake nomer baris ing file ing ngendi metode kasebut diarani |
|
Ngasilake jeneng modul (bisa uga null ) |
|
Ngasilake versi modul (bisa uga null ) |
Bisa mbantu sampeyan entuk informasi sing luwih lengkap babagan tumpukan telpon saiki:
Kode | Output konsol | Cathetan |
---|---|---|
|
|
nama kelas metode nama file nama baris nomor modul nama modul versi nama kelas metode nama file nama baris nomor modul nama modul versi nama kelas metode nama file nama baris nomor modul nama modul versi |
3. Tumpukan
Sampeyan wis ngerti apa tilak tumpukan , nanging apa tumpukan (kelas Stack)?
Tumpukan minangka struktur data sing bisa ditambahake unsur lan saka ngendi sampeyan bisa njupuk unsur. Kanthi mengkono, sampeyan mung bisa njupuk unsur saka mburi: sampeyan njupuk sing pungkasan ditambahake, banjur sing kapindho kanggo pungkasan ditambahake, etc.
Tumpukan jeneng dhewe nuduhake prilaku iki, kaya carane sampeyan bakal sesambungan karo tumpukan kertas. Yen sampeyan sijine sheets 1, 2 lan 3 ing tumpukan, sampeyan kudu njupuk ing urutan mbalikke: pisanan sheet katelu, banjur kaloro, lan mung banjur pisanan.
Jawa malah duwe kelas koleksi Stack khusus kanthi jeneng lan prilaku sing padha. Kelas iki nuduhake akeh prilaku karo ArrayList
lan LinkedList
. Nanging uga duwe cara sing ngetrapake prilaku tumpukan:
Metode | Katrangan |
---|---|
|
Nambahake obj unsur ing ndhuwur tumpukan |
|
Njupuk unsur saka ndhuwur tumpukan (ambane tumpukan suda) |
|
Ngasilake item ing ndhuwur tumpukan (tumpukan ora owah) |
|
Priksa manawa koleksi kasebut kosong |
|
Nggoleki obyek ing koleksi lan ngasilakeindex |
Tuladha:
Kode | Isi tumpukan (ndhuwur tumpukan ana ing sisih tengen) |
---|---|
|
|
Tumpukan digunakake cukup kerep ing program. Dadi iki koleksi migunani.
4. Nampilake tilak tumpukan sak pangecualian nangani
Napa dhaptar panggilan metode diarani jejak tumpukan ? Amarga yen sampeyan mikir dhaptar metode minangka tumpukan lembaran kertas kanthi jeneng metode, banjur nalika sampeyan nelpon metode sabanjure, sampeyan nambahake sheet kanthi jeneng metode kasebut menyang tumpukan kasebut. Lan lembaran kertas sabanjure dadi ndhuwur, lan liya-liyane.
Nalika cara ends, sheet ing ndhuwur tumpukan dibusak. Sampeyan ora bisa mbusak sheet saka tengah tumpukan tanpa mbusak kabeh sheets ndhuwur iku. Kajaba iku, sampeyan ora bisa mungkasi cara ing tengah chain telpon tanpa mungkasi kabeh cara sing wis disebut.
Pangecualian
Panggunaan liyane sing menarik kanggo tumpukan yaiku nalika nangani pangecualian.
Nalika ana kesalahan ing program lan pangecualian dibuwang , istiméwa ngemot tilak tumpukan saiki - Uploaded sing kasusun saka dhaftar cara miwiti, saka cara utama lan pungkasan karo cara ngendi kesalahan dumadi. Malah ana garis ing ngendi pangecualian dibuwang!
Tilak tumpukan iki disimpen ing pangecualian lan bisa gampang dijupuk saka iku nggunakake cara ing ngisor iki:StackTraceElement[] getStackTrace()
Tuladha:
Kode | Cathetan |
---|---|
|
Nyekel pangecualian Entuk tilak tumpukan sing ana nalika ana kesalahan. |
Iki minangka metode kelas Throwable
, mula kabeh turunane (yaiku kabeh pengecualian) duwe getStackTrace()
metode kasebut. Super trep, huh?
Tampilake tilak tumpukan pangecualian
Miturut cara, Throwable
kelas wis cara liyane kanggo nggarap ngambah tumpukan, cara sing nampilake kabeh informasi tilak tumpukan disimpen nang pangecualian. Iki diarani printStackTrace()
.
Cukup trep, sampeyan bisa nelpon ing sembarang istiméwa.
Tuladha:
Kode |
---|
|
Output konsol |
|
GO TO FULL VERSION