ইতিমধ্যে উত্তর হিসাবে দেওয়া হয়েছে , কোডটি কার্যকর করা এবং বিশেষত ফাংশনগুলি কল করা সম্ভব হবে StackOverflowError
কারণ এটি ধরা পরে জেভিএমের সাধারণ ব্যতিক্রম হ্যান্ডলিং পদ্ধতিটি আপনার ব্যবহারের জন্য স্ট্যাক-স্পেসকে মুক্ত করে throw
এবং catch
পয়েন্টগুলির মধ্যে স্ট্যাকটি উন্মুক্ত করে । এবং আপনার পরীক্ষাটি বিষয়টি নিশ্চিত করে।
যাইহোক, যে বলে যে এটি সাধারণভাবে হয়, যতটা সম্ভব বেশ একই নয় পুনরুদ্ধার A থেকে StackOverflowError
।
একটি StackOverflowError
আইএস-এ VirtualMachineError
, যা আইএস-এএন Error
। আপনি উল্লেখ হিসাবে, জাভা একটি জন্য কিছু অস্পষ্ট পরামর্শ প্রদান Error
:
গুরুতর সমস্যাগুলি নির্দেশ করে যে যুক্তিসঙ্গত প্রয়োগটি ধরার চেষ্টা করা উচিত নয়
এবং আপনি যুক্তিসঙ্গতভাবে, এই উপসংহারে যে উচিত একটি সংক্রামক মত শোনায় Error
কিছু পরিস্থিতিতে ঠিক আছে হতে পারে। নোট করুন যে একটি পরীক্ষা সম্পাদন করলে বোঝা যায় না যে সাধারণভাবে কিছু করা নিরাপদ। কেবল জাভা ভাষার নিয়ম এবং আপনার ব্যবহৃত ক্লাসগুলির স্পেসিফিকেশনগুলি এটি করতে পারে। এ VirtualMachineError
ব্যতিক্রমের একটি বিশেষ শ্রেণি, কারণ জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন এবং জাভা ভার্চুয়াল মেশিন স্পেসিফিকেশন এই ব্যতিক্রমটির শব্দার্থ সম্পর্কে তথ্য সরবরাহ করে। বিশেষত, দ্বিতীয়টি বলেছেন :
একটি জাভা ভার্চুয়াল মেশিন বাস্তবায়ন এমন একটি বস্তুকে ছুঁড়ে দেয় যা শ্রেণীর সাবক্লাসের উদাহরণ, VirtualMethodError
যখন কোনও অভ্যন্তরীণ ত্রুটি বা সংস্থান সীমাবদ্ধতা এটিকে এই অধ্যায়ে বর্ণিত শব্দার্থক প্রয়োগগুলি থেকে বিরত রাখে। এই স্পেসিফিকেশনটি পূর্বাভাস দিতে পারে না যে অভ্যন্তরীণ ত্রুটি বা সংস্থান সীমাবদ্ধতার মুখোমুখি হতে পারে এবং যখন তাদের প্রতিবেদন করা যেতে পারে তখন সঠিকভাবে আদেশ দেয় না। সুতরাং, VirtualMethodError
জাভা ভার্চুয়াল মেশিনের ক্রিয়াকলাপের সময় নীচে সংজ্ঞায়িত সাবক্লাসগুলির যে কোনও সময় নিক্ষেপ করা যেতে পারে:
...
StackOverflowError
: জাভা ভার্চুয়াল মেশিন বাস্তবায়ন একটি থ্রেডের জন্য স্ট্যাক স্পেসের বাইরে চলে গেছে, সাধারণত যেহেতু থ্রেডটি এক্সিকিউটিভ প্রোগ্রামের একটি ত্রুটির ফলস্বরূপ একটি সীমাহীন সংখ্যার পুনরাবৃত্তির অনুরোধ করে।
গুরুত্বপূর্ণ সমস্যাটি হ'ল আপনি কখনই বা কখন StackOverflowError
নিক্ষিপ্ত হবে তা "অনুমান করতে পারবেন না" । আছে কোন গ্যারান্টি যেখানে এটি নিক্ষেপ করা হবে না সম্পর্কে। উদাহরণস্বরূপ, কোনও পদ্ধতিতে এন্ট্রি দেওয়ার সময় আপনি এটির উপর নির্ভর করতে পারবেন না । এটি কোনও পদ্ধতির মধ্যে বিন্দুতে ফেলে দেওয়া যেতে পারে ।
এই অনির্দেশ্যতা সম্ভাব্য বিপর্যয়কর। যেহেতু এটি কোনও পদ্ধতির মধ্যে নিক্ষেপ করা যেতে পারে, শ্রেণিটিকে একটি "পারমাণবিক" অপারেশন হিসাবে বিবেচনা করে ক্রিয়াকলাপটিকে একটি আংশিক সংশোধিত, অসামঞ্জস্যপূর্ণ, অবস্থায় রেখে দেয় part অসামঞ্জস্যপূর্ণ অবস্থানে থাকা অবজেক্টটির সাথে, সেই বস্তুটি ব্যবহারের যে কোনও প্রয়াস ফলস্বরূপ ভুল আচরণের কারণ হতে পারে। সমস্ত ব্যবহারিক ক্ষেত্রে আপনি জানতে পারবেন না কোন বস্তুটি বেমানান অবস্থায় রয়েছে তাই আপনাকে ধরে নিতে হবে যে কোনও বস্তু বিশ্বাসযোগ্য নয়। কোনও পুনরুদ্ধার অপারেশন বা ব্যতিক্রম ধরা পরে চালিয়ে যাওয়ার প্রচেষ্টা তাই ভ্রান্ত আচরণ করতে পারে। একমাত্র নিরাপদ কাজটি হ'ল এটি না ধরাStackOverflowError
বরং প্রোগ্রামটি শেষ হতে দেয়। (অনুশীলনে আপনি সমস্যা সমাধানে সহায়তা করার জন্য কিছু ত্রুটিযুক্ত লগিং করার চেষ্টা করতে পারেন, তবে আপনি সেই লগিং অপারেটিং সঠিকভাবে নির্ভর করতে পারবেন না )। যে, আপনি নির্ভরযোগ্যভাবে একটি থেকে পুনরুদ্ধার করতে পারবেন নাStackOverflowError
।