Jejak tumpukan - 1

"Hai! Hari ini saya akan memberi tahu Anda apa itu stack trace. Tapi pertama-tama saya perlu memberi tahu Anda apa itu stack."

"Bayangkan setumpuk kertas – arahan untuk karyawan tertentu. Anda dapat meletakkan tugas baru di atas tumpukan, atau Anda dapat mengambil tugas dari atas. Ini berarti bahwa tugas tidak akan dijalankan sesuai urutan penerimaannya. . Tugas yang ditempatkan pada tumpukan paling baru akan menjadi yang pertama dieksekusi. Menyusun elemen koleksi dengan cara ini membentuk tumpukan . "

" Java memiliki koleksi khusus untuk itu – Stack . Ini adalah koleksi yang memiliki metode untuk 'menambahkan elemen' dan 'mengambil (mendapatkan) elemen'. Seperti yang sudah Anda duga, elemen yang ditambahkan terakhir akan menjadi yang pertama untuk diambil."

"Kedengarannya agak mudah."

"Bagus. Sekarang saya akan menjelaskan apa itu stack trace ."

"Bayangkan bahwa dalam program Java metode A disebut metode B , yang disebut metode C , yang pada gilirannya disebut metode D . Untuk keluar dari metode B , pertama-tama kita harus keluar dari metode C , dan untuk melakukan itu - kita harus keluar dulu dari metode D . Ini perilaku menyerupai tumpukan."

"Kenapa kamu bilang mirip?"

"Untuk mendapatkan beberapa tugas di tengah tumpukan kertas kami, misalnya, Anda harus terlebih dahulu menyelesaikan semua tugas yang ada di atasnya."

"Ada beberapa kesamaan, tapi aku tidak yakin aku mengerti semuanya dengan benar."

"Lihat. Tumpukan adalah sekumpulan elemen. Seperti potongan kertas dalam tumpukan. Untuk mengambil kertas ketiga dari atas, pertama-tama Anda harus mengambil yang kedua, dan untuk itu, Anda harus mengambil yang pertama. Anda selalu dapat meletakkan dan mengambil kertas, tetapi Anda selalu harus mengambil kertas paling atas terlebih dahulu."

"Hal yang sama berlaku untuk pemanggilan fungsi. Metode A memanggil metode B , yang memanggil metode C . Untuk keluar dari A , Anda harus terlebih dahulu keluar dari B , dan untuk melakukan itu, Anda harus keluar dari C ."

"Tunggu. Jika saya mengerti apa yang Anda katakan, seluruh konsep tumpukan bermuara pada 'ambil selembar kertas yang ditambahkan terakhir' dan 'Anda hanya dapat keluar dari metode yang terakhir Anda masukkan'. Apakah itu akurat? "

"Ya. Urutan pemanggilan fungsi dikenal sebagai 'tumpukan panggilan' atau hanya 'tumpukan'. Fungsi terakhir yang dipanggil adalah fungsi pertama yang diakhiri. Mari kita gali contoh."

Dapatkan dan tampilkan tumpukan panggilan saat ini:
public class ExceptionExample
{
  public static void main(String[] args)
  {
    method1();
  }

  public static void method1()
  {
    method2();
  }

  public static void method2()
  {
    method3();
  }

  public static void method3()
  {
     StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace();
    for (StackTraceElement element : stackTraceElements)
    {
       System.out.println(element.getMethodName());
    }
  }
}
Hasil:
getStackTrace
method3
method2
method1
main

"Oke. Saya mengerti segalanya tentang pemanggilan fungsi. Tapi apakah StackTraceElement ini?"

"Mesin Java melacak semua pemanggilan fungsi. Untuk itu, ia memiliki koleksi khusus – tumpukan. Saat satu fungsi memanggil fungsi lainnya, Mesin Java menempatkan objek StackTraceElement baru ke dalam tumpukan. Saat fungsi selesai, elemen tersebut dihapus dari tumpukan. Ini berarti bahwa tumpukan selalu menyimpan informasi terkini tentang keadaan saat ini dari 'tumpukan panggilan fungsi'. "

"Setiap objek StackTraceElement berisi informasi tentang metode yang dipanggil. Secara khusus, Anda bisa mendapatkan nama metode menggunakan metode getMethodName ."

"Anda dapat melihat cara kerjanya pada contoh di atas:

1) Kami mendapatkan tumpukan panggilan.

2) Kami menggunakan untuk setiap loop untuk melewatinya. Saya harap Anda tidak lupa apa itu.

3) Kami menampilkan nama metode ke System.out ."

"Menarik! Dan tidak terlalu rumit juga. Terima kasih, Rishi!"