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

জাভার ব্যতিক্রম শ্রেণিবিন্যাসের শীর্ষে রয়েছে থ্রোয়েবল ক্লাস, যার দুটি বংশধর রয়েছে:

  • ব্যতিক্রম , যা আপনার প্রোগ্রামে ত্রুটির জন্য দায়ী।
  • এবং আজকের জন্য আমাদের নায়ক — ত্রুটি , যা JVM এর ত্রুটির জন্য দায়ী।
    এটি উল্লেখযোগ্য যে এগুলি সম্ভবত কোডিং বাগ নয়, বরং সমস্যা যা সাধারণত বিকাশকারীর উপর নির্ভর করে না।

একটি ত্রুটি সঙ্গে কি করতে হবে

"ত্রুটি" ধরার সময়, আপনি লগিং ব্যতীত ক্যাচ ব্লকে কোনো কাজ সম্পাদন করতে পারবেন না , যেহেতু আমরা JVM-এর সমস্যার কথা বলছি।

লগিং ভাল: আপনি যখন রানটাইম ত্রুটি পান, আপনি লগগুলি দেখতে পারেন, এর কারণ দেখতে পারেন এবং কী ঠিক করতে হবে তা জানতে পারেন৷

যেহেতু আপনি জানেন না যে আপনি যখন আপনার কোড লিখবেন তখন আপনি কী ধরনের ত্রুটি পেতে পারেন, তাই ক্যাচ ব্লকে একটি নির্দিষ্ট ধরনের লেখার কোন মানে হয় নাত্রুটি ক্লাস নিজেই ব্যবহার করা সেরা সমাধান নয়, যেহেতু এই ক্ষেত্রে, আপনি শুধুমাত্র ত্রুটিগুলি ধরবেন।

তদনুসারে, থ্রোয়েবল ক্লাস ব্যবহার করা ভাল , যা ত্রুটি এবং ব্যতিক্রম উভয়ই ধরতে পারে । এই অনুশীলনে কিভাবে দেখায়?

এইরকম কোড লেখা ঠিক নয়:

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
এই ধরনের কোড লেখাও ঠিক নয়:

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
কিন্তু এই মত কোড ঠিক আছে:

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

ত্রুটিগুলি পরিচালনার জন্য দ্বিতীয় বিকল্প হল পদ্ধতিতে একটি থ্রোস ক্লজ ঘোষণা করার পরে সেগুলিকে উচ্চতর নিক্ষেপ করা । এই কৌশলটি ব্যবহার করা হয় যখন আপনার কোডটি তাত্ত্বিকভাবে একটি ত্রুটি ছুঁড়তে পারে এবং আপনি তাদের প্রত্যেককে সতর্ক করতে চান যারা আপনার কোড ব্যবহার করতে পারে যাতে তারা সঠিকভাবে ত্রুটিটি পরিচালনা করতে পারে।

সাধারণ ত্রুটি

কিছু জনপ্রিয় ত্রুটি হল OutOfMemoryError এবং StackOverflowError ক্লাস।

OutOfMemoryError প্রায়ই দেখা যায় যখন প্রোগ্রামে অবজেক্ট তৈরি করার জন্য পর্যাপ্ত মেমরি থাকে না এবং আবর্জনা সংগ্রহকারী রাখতে পারে না। ফলাফল একটি OutOfMemoryError হয় ।

জাভা আপনাকে মেমরি ফাঁস রোধ করতে ম্যানুয়ালি অবজেক্ট মুছে দিতে দেয় না, তবে আপনি আবর্জনা এড়াতে পারেন যাতে আবর্জনা সংগ্রহকারীকে অতিরিক্ত কাজ না করে এবং স্তূপ না জমে।

উদাহরণস্বরূপ, এই জাতীয় কোড মেমরিতে প্রচুর আবর্জনা তৈরি করবে:


while (true) {
    new Object();
}

দ্বিতীয় ত্রুটিটি আমি আপনাকে বলতে চাই StackOverflowError , যা স্ট্যাক ওভারফ্লো হলে নিক্ষিপ্ত হয়। যেহেতু স্ট্যাক প্রধানত স্থানীয় ভেরিয়েবল, প্যারামিটার এবং পদ্ধতি কল সংরক্ষণ করে, তাই পুনরাবৃত্তি (বা একটি পুনরাবৃত্ত পদ্ধতি কল) এই ত্রুটির একটি খুব সাধারণ কারণ:


public void foo() {
    foo();
}

প্রোগ্রাম নির্বাহের সময় সমস্যা এড়াতে, আধুনিক IDE প্রায়ই বারবার কলিং পদ্ধতি সম্পর্কে সতর্ক করে।

আপনি এমন একটি প্রোগ্রাম ঠিক করতে পারবেন না যা Errors নিক্ষেপ করে , কিন্তু আপনি এমন কোড লিখতে পারেন যা একটি ত্রুটি ছুঁড়ে ফেলবে না এবং আপনার প্রোগ্রামটি ভেঙে দেবে। মেমরি দিয়ে আপনি কী করেন তা দেখুন, সাবধানে বস্তু তৈরি করুন এবং সঠিকভাবে কল করুন। আপনি যদি তা করেন তবে আপনার কোডে আপনার কম সমস্যা হবে।

ত্রুটি এবং ব্যতিক্রম প্রকারের মধ্যে পার্থক্য

ত্রুটি ব্যতিক্রম
ক্যাচ ব্লকে সংশোধন করা যাবে না একটি ক্যাচ ব্লকে পরিচালনা করা যেতে পারে
কম্পাইল সময়ে ঘটবে না কম্পাইল সময়ে ধরা যাবে
JVM-এ সমস্যা কোড লজিক সমস্যা
সমস্ত ত্রুটি আনচেক করা হয় চেক করা এবং আনচেক করা

আপনি জাভাতে ব্যতিক্রমগুলি এড়াতে পারবেন না, তবে আপনার তাদের ভয় পাওয়া উচিত নয়। আপনাকে কেবল বুঝতে হবে প্রতিটি প্রকার কী প্রতিনিধিত্ব করে এবং কীভাবে এটি পরিচালনা করতে হয় তা জানতে হবে। আজ যে জন্য সব! দেখা হবে!