Yığın izleme - 1

"Merhaba! Bugün size yığın izlemenin ne olduğunu anlatacağım. Ama önce yığının ne olduğunu söylemem gerekiyor."

"Bir yığın kağıt düşünün - belirli bir çalışan için yönergeler. Yığının üstüne yeni bir görev koyabilirsiniz veya en baştan bir görev alabilirsiniz. Bu, görevlerin alındıkları sırayla yürütülmeyeceği anlamına gelir. Yığına en son yerleştirilen görev ilk yürütülecek olan olacaktır. Bir koleksiyonun elemanlarını bu şekilde yapılandırmak bir yığın oluşturur . "

" Java'nın bunun için özel bir koleksiyonu var - Stack . Bu, 'bir öğe eklemek' ve 'bir öğeyi almak (almak)' için yöntemleri olan bir koleksiyondur. Tahmin etmiş olabileceğiniz gibi, en son eklenen öğe ilk olacaktır. alındı."

"Kulağa oldukça basit geliyor."

"Harika. Şimdi yığın izlemenin ne olduğunu açıklayacağım ."

"A yönteminin B yöntemi olarak adlandırıldığını ve bunun da C yöntemi olarak adlandırıldığını ve bunun da D yöntemi olarak adlandırıldığını hayal edin. B yönteminden çıkmak için önce C yönteminden çıkmalıyız ve bunu yapmak için önce D yönteminden çıkmalıyız . Bu davranış bir yığına benzer."

"Neden ona benzediğini söylüyorsun?"

"Örneğin, kağıt yığınımızın ortasındaki bir göreve ulaşmak için, önce onun üzerindeki tüm görevleri yerine getirmeniz gerekir."

"Biraz benzerlik var ama her şeyi doğru anladığımdan emin değilim."

"Bak, bir yığın bir öğeler kümesidir. Bir yığındaki kağıt parçaları gibi. Üstten üçüncü kağıdı almak için önce ikinciyi almanız gerekir, bunun için de birinciyi almanız gerekir. her zaman kağıt parçaları koyabilir ve alabilir, ancak her zaman önce üstteki kağıdı almanız gerekir."

"Aynısı işlev çağrıları için de geçerlidir. Yöntem A , yöntem C'yi çağıran yöntem B'yi çağırır . A'dan çıkmak için önce B'den çıkmalısınız ve bunu yapmak için C'den çıkmalısınız ."

"Bekle. Ne dediğini anladıysam, tüm yığın kavramı, 'en son eklenen kağıt parçasını al' ve 'yalnızca en son girdiğin yöntemden çıkabilirsin' şeklinde özetlenebilir. Bu doğru mu? "

"Evet. İşlev çağrılarının dizisi 'çağrı yığını' veya kısaca 'yığın' olarak bilinir. En son çağrılan işlev, sona eren ilk işlevdir. Bir örneğe bakalım."

Geçerli çağrı yığınını alın ve görüntüleyin:
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());
    }
  }
}
Sonuç:
getStackTrace
method3
method2
method1
main

"Tamam. İşlev çağrılarıyla ilgili her şeyi anladım. Peki bu StackTraceElement nedir?"

"Java Makinesi tüm işlev çağrılarını takip eder. Bunun için özel bir koleksiyonu vardır: yığın. Bir işlev diğerini çağırdığında, Java Makinesi yığına yeni bir StackTraceElement nesnesi koyar. Bir işlev bittiğinde, o öğe kaldırılır . Bu , yığının her zaman 'işlev çağrıları yığınının' mevcut durumu hakkında güncel bilgileri depoladığı anlamına gelir .

"Her StackTraceElement nesnesi, çağrılan yöntem hakkında bilgi içerir. Özellikle, getMethodName yöntemini kullanarak yöntem adını alabilirsiniz ."

"Yukarıdaki örnekte bunun nasıl çalıştığını görebilirsiniz:

1) Çağrı yığınını alıyoruz.

2) İçinden geçmek için bir for-each döngüsü kullanıyoruz . Umarım bunun ne olduğunu unutmamışsındır.

3) Yöntem adlarını System.out olarak çıktılıyoruz ."

"Büyüleyici! Ve çok karmaşık da değil. Teşekkürler, Rishi!"