স্ট্যাক ট্রেস - 1

"হাই! আজ আমি আপনাকে বলব স্ট্যাক ট্রেস কী। তবে প্রথমে আমাকে বলতে হবে স্ট্যাক কী।"

"কাগজপত্রের একটি গাদা কল্পনা করুন - একটি নির্দিষ্ট কর্মচারীর জন্য নির্দেশাবলী। আপনি স্তূপের উপরে একটি নতুন টাস্ক রাখতে পারেন, বা আপনি উপরে থেকে একটি টাস্ক নিতে পারেন। এর মানে হল যে কাজগুলি সেগুলি যে ক্রমানুসারে প্রাপ্ত হয়েছিল সে অনুযায়ী কার্যকর করা হবে না। . স্তূপে স্থাপন করা টাস্কটি অতি সম্প্রতি সম্পাদিত হওয়া প্রথম হবে৷ একটি সংগ্রহের উপাদানগুলিকে এইভাবে গঠন করা একটি স্ট্যাক তৈরি করে ৷ "

" জাভা এর জন্য একটি বিশেষ সংগ্রহ রয়েছে - স্ট্যাক । এটি এমন একটি সংগ্রহ যেখানে 'একটি উপাদান যোগ করা' এবং 'একটি উপাদান নেওয়া (পেতে)' করার পদ্ধতি রয়েছে। আপনি অনুমান করতে পারেন, যে উপাদানটি সর্বশেষ যোগ করা হয়েছিল সেটিই প্রথম হবে গ্রহণ করা."

"বেশ সোজাসুজি শোনাচ্ছে।"

"দারুণ। এখন আমি ব্যাখ্যা করব স্ট্যাক ট্রেস কী ।"

"ভাবুন যে একটি জাভা প্রোগ্রাম পদ্ধতিতে A বলা হয় মেথড B , যাকে বলে মেথড সি , যাকে বলে মেথড সি, যাকে বলে মেথড ডি । মেথড বি থেকে বের হতে হলে আমাদের প্রথমে মেথড সি থেকে প্রস্থান করতে হবে , এবং সেটা করার জন্য - আমাদের প্রথমে মেথড ডি থেকে প্রস্থান করতে হবে । আচরণ একটি স্ট্যাকের অনুরূপ।"

"কেন তুমি এটার সাদৃশ্য বলো?"

"আমাদের কাগজপত্রের স্ট্যাকের মাঝখানে কিছু টাস্ক পেতে, উদাহরণস্বরূপ, আপনাকে প্রথমে এটির উপরে থাকা সমস্ত কাজগুলি সম্পাদন করতে হবে।"

"কিছু মিল আছে, কিন্তু আমি নিশ্চিত নই যে আমি সবকিছু সঠিকভাবে বুঝতে পেরেছি।"

"দেখুন। একটি স্ট্যাক হল উপাদানগুলির একটি সেট। একটি স্তূপের মধ্যে থাকা কাগজের টুকরোগুলির মতো। উপরের থেকে তৃতীয় কাগজটি নিতে, আপনাকে প্রথমে দ্বিতীয়টি নিতে হবে এবং এর জন্য, আপনাকে প্রথমটি নিতে হবে। আপনি সবসময় কাগজের টুকরো রাখতে এবং নিতে পারেন, তবে আপনাকে সর্বদা প্রথম কাগজটি নিতে হবে।"

"ফাংশন কলের ক্ষেত্রেও একই কথা। পদ্ধতি A কলের পদ্ধতি B , যেটিকে C পদ্ধতি বলে। A থেকে প্রস্থান করতে , আপনাকে প্রথমে B থেকে প্রস্থান করতে হবে , এবং এটি করার জন্য, আপনাকে C থেকে প্রস্থান করতে হবে ।"

"অপেক্ষা করুন। আপনি যা বলছেন তা যদি আমি বুঝতে পারি, তাহলে একটি স্ট্যাকের সম্পূর্ণ ধারণাটি 'শেষে যোগ করা কাগজের টুকরোটি নিতে' এবং 'আপনি সম্প্রতি যে পদ্ধতিটি প্রবেশ করেছেন তা থেকে বেরিয়ে আসতে পারেন'। এটি কি সঠিক? "

"হ্যাঁ। ফাংশন কলের ক্রমটি 'কল স্ট্যাক' বা সহজভাবে 'স্ট্যাক' নামে পরিচিত। কল করা শেষ ফাংশনটি শেষ হওয়ার প্রথম ফাংশন। আসুন একটি উদাহরণ খনন করি।"

বর্তমান কল স্ট্যাক পান এবং প্রদর্শন করুন:
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());
    }
  }
}
ফলাফল:
getStackTrace
method3
method2
method1
main

"ঠিক আছে। আমি ফাংশন কল সম্পর্কে সবকিছু পেয়েছি। কিন্তু এই StackTraceElement কি?"

"জাভা মেশিন সমস্ত ফাংশন কলের ট্র্যাক রাখে। এর জন্য, এটির একটি বিশেষ সংগ্রহ রয়েছে - স্ট্যাক। যখন একটি ফাংশন অন্যটিকে কল করে, তখন জাভা মেশিন স্ট্যাকের উপর একটি নতুন স্ট্যাকট্রেস এলিমেন্ট অবজেক্ট রাখে। যখন একটি ফাংশন শেষ হয়, সেই উপাদানটি সরানো হয় স্ট্যাক থেকে। এর মানে স্ট্যাক সবসময় 'ফাংশন কলের স্ট্যাক'-এর বর্তমান অবস্থা সম্পর্কে আপ-টু-ডেট তথ্য সংরক্ষণ করে। "

"প্রতিটি StackTraceElement অবজেক্টে বলা পদ্ধতি সম্পর্কে তথ্য থাকে। বিশেষ করে, আপনি getMethodName পদ্ধতি ব্যবহার করে পদ্ধতির নাম পেতে পারেন।"

"আপনি উপরের উদাহরণে এটি কীভাবে কাজ করে তা দেখতে পারেন:

1) আমরা কল স্ট্যাক পেতে.

2) আমরা এটির মধ্য দিয়ে যাওয়ার জন্য প্রতিটি লুপ ব্যবহার করি। আমি আশা করি আপনি এটি কী তা ভুলে যাননি।

3) আমরা System.out এ পদ্ধতির নাম আউটপুট করি ।"

"চমৎকার! এবং খুব জটিলও নয়। ধন্যবাদ, ঋষি!"