কম্পিউটার

java.lang.NullPointerException Error কিভাবে সমাধান করবেন

আপনি যদি জাভা-ভিত্তিক অ্যাপ্লিকেশনগুলিতে কাজ করে থাকেন তবে আপনি অবশ্যই একটি NullPointerException নামক কিছু দেখেছেন। নাল পয়েন্টার ব্যতিক্রম হল জাভা অ্যাপ্লিকেশন ডেভেলপমেন্টের সবচেয়ে সাধারণ ত্রুটিগুলির মধ্যে একটি। এই ব্যতিক্রমটি সাধারণত একটি মানব ত্রুটির ফলাফল, কিন্তু এই ধরনের ত্রুটি ডিবাগ করার জন্য সময় নষ্ট হতে পারে। এই সমস্যাটি সম্পূর্ণরূপে একটি সিনট্যাক্টিক্যাল ত্রুটি নয়, তাই এটি মাঝে মাঝে সমস্যাটি সনাক্ত করা কঠিন হতে পারে।

এই নিবন্ধে, আমরা java.lang.NullPointerException কী, কেন এটি ঘটে, আপনি কীভাবে এটি ঠিক করতে পারেন এবং বন্য নাল পয়েন্টারগুলিতে দৌড়ানো এড়াতে অনুসরণ করার জন্য কিছু সেরা অনুশীলনের উপর নজর রাখি। আর কিছু না করে, চলুন শুরু করা যাক।

java.lang.NullPointerException কি?

নাল পয়েন্টার ব্যতিক্রম হল জাভা ভাষা দ্বারা সমর্থিত কয়েকটি ব্যতিক্রমগুলির মধ্যে একটি। এটি ইঙ্গিত করে যে একটি রেফারেন্স ভেরিয়েবল অ্যাক্সেস করার চেষ্টা করা হয়েছে যা বর্তমানে নালকে নির্দেশ করে।

নাল হল জাভাতে ডিফল্ট মান যা ভেরিয়েবলের জন্য বরাদ্দ করা হয় যা ব্যবহারকারীর দ্বারা ঘোষণার পরে বা তার সাথে শুরু হয় না। নিম্নলিখিত উদাহরণটি বিবেচনা করুন যেখানে আপনি এইরকম একটি পরিবর্তনশীল ঘোষণা করেন:

String str;

এবং তারপর ভেরিয়েবলের বিষয়বস্তু মুদ্রণ করার চেষ্টা করুন:

System.out.println(str);
// => null

উপরে দেখা যায়, আউটপুটে 'নাল' মুদ্রিত হয়। এটি দেখায় যে যেহেতু ভেরিয়েবল strটি শুরু করা হয়নি, এটি বর্তমানে মানটিকে শূন্য নির্দেশ করে বা ধরে রাখে। একটি নাল পয়েন্টিং ভেরিয়েবল যে সমস্যাটি তুলে ধরে তা হল যে ভেরিয়েবলটি শুধুমাত্র একটি রেফারেন্স, এবং এটি কিছু নির্দেশ করে না। আপনি যদি একটি নাল পয়েন্টিং ভেরিয়েবলে সংরক্ষিত ডেটাতে কিছু অপারেশন করার চেষ্টা করেন, তবে সিস্টেমটি কী করতে হবে তা জানবে না। এটি ঘটে কারণ ভেরিয়েবলে আসলে কোনো ডেটা সংরক্ষিত নেই; এটি একটি অকার্যকর সত্তাকে নির্দেশ করে৷

java.lang.NullPointer.Exception এর উদাহরণ

java.lang.NullPointerException-এর উদাহরণ খোঁজা কঠিন কাজ নয়, কারণ আপনাকে যা করতে হবে তা হল এটি অ্যাক্সেস করার চেষ্টা করার আগে একটি ভেরিয়েবল আরম্ভ করা নয়। উদাহরণস্বরূপ, আসুন StringBuilder ক্লাস বিবেচনা করা যাক। StringBuilder হল একটি ক্লাস যা স্ট্রিং গঠন এবং ম্যানিপুলেশন পরিচালনা করতে ব্যবহৃত হয়। স্ট্রিং তৈরি করতে আপনি সাধারণত ক্লাসটি কীভাবে ব্যবহার করবেন তা এখানে:

import java.util.StringBuilder;

public class Test {
  public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();

    sb.append("Hello ");
    sb.append("World!");
   
    String result = sb.toString();

    System.out.println(result);
    // => Hello World!
  }
}

আপনি যদি উপরের স্নিপেটটি চালান তবে এটি ঠিক কাজ করবে। আসুন এর পরিবর্তিত সংস্করণটি দেখে নেওয়া যাক যা একটি নাল পয়েন্টার ব্যতিক্রম নিক্ষেপ করবে:

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় ব্যয় করেছে।

import java.util.StringBuilder;

public class Test {
  public static void main(String[] args) {
    StringBuilder sb;

    sb.append("Hello ");
    sb.append("World!");
   
    String result = sb.toString();

    System.out.println(result);
  }
}

আপনি দেখতে পাচ্ছেন, আমরা এটি ঘোষণা করার সময় StringBuilder ক্লাসের একটি উদাহরণ শুরু করিনি। যখন sb.append() লাইনগুলি কার্যকর করা হয়, sb বাস্তবে কোনও বস্তুর দিকে নির্দেশ করে না, বরং এটি নাল নির্দেশ করে। এখানেই একটি NullPointerException নিক্ষিপ্ত হয়। ব্যতিক্রমের কারণে, JVM এর পরে কোনো বিবৃতি কার্যকর করতে পারে না।

কিভাবে java.lang.NullPointerException ত্রুটি ঠিক করবেন

একটি নাল পয়েন্টার ব্যতিক্রম তৈরি করা সহজ, কিন্তু এটি এড়ানো বা ঠিক করা কঠিন। যদিও কিছু ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDEs) আপনাকে সতর্ক করে যদি আপনি একটি ভেরিয়েবলকে কিছু সামঞ্জস্যপূর্ণ মান দিয়ে আরম্ভ করার আগে অ্যাক্সেস করেন, তবে বেশিরভাগ IDE জটিল পরিস্থিতিতে এটি বের করতে পারে না, যেমন একাধিক পদ্ধতি কলের মাধ্যমে একটি ভেরিয়েবল পাস করার সময়। একটি নাল পয়েন্টার ব্যতিক্রমের জন্য সঠিক সমাধান আপনার পরিস্থিতি এবং কোডের উপর নির্ভর করে। এখানে সাধারণ নাল পয়েন্টার পরিস্থিতি ঠিক করার কিছু শীর্ষ উপায় রয়েছে:

ম্যানুয়াল ত্রুটির জন্য আপনার কোড পরীক্ষা করুন

Null Pointer Exceptions হওয়ার সবচেয়ে বড় কারণ হল মানুষের ত্রুটি। নিশ্চিত করুন যে আপনি যে প্রোগ্রামটি লিখেছেন সেটি সঠিক যুক্তি বহন করে যা আপনি প্রাথমিকভাবে চেয়েছিলেন। এছাড়াও, সোর্স কোডের মাধ্যমে আপনার চোখ চালান আপনি কোনো বিবৃতি মিস করেছেন কিনা বা কোনো ভেরিয়েবলের বানান ভুল করেছেন যা কিছু ভেরিয়েবলকে কোনো মান নির্ধারণ না করার কারণ হতে পারে।

নিশ্চিত করুন যে আপনি আপনার কোডটি আপনার যুক্তি আপনাকে যেভাবে নির্দেশ করে সেভাবে লিখেছেন, এবং আপনি কোনো বিবৃতি লেখার ক্ষেত্রে মিস করেননি, বা ভুল রেফারেন্সের জন্য বস্তু বরাদ্দ করেননি। একটি অঙ্গুষ্ঠের নিয়ম হিসাবে, কোন ভেরিয়েবল ব্যবহার করার আগে এটি একটি বস্তুর সাথে শুরু করা হয়েছে কিনা তা পরীক্ষা করে দেখুন৷

কোডের চারপাশে নিরাপত্তা পরীক্ষা রাখুন যা নাল পয়েন্টার ব্যতিক্রম হতে পারে

আপনি যদি কোডের লাইনটি জানেন যা আপনার NullPointer ঘটাচ্ছে এবং বিশ্বাস করেন যে আপনার যুক্তিও সঠিক, আপনি একটি ট্রাই-ক্যাচ ব্লকে কোডের বিভাগটি মোড়ানো করতে পারেন এবং কখন একটি নাল পয়েন্টার ধরা হয় তার আচরণটি সংজ্ঞায়িত করতে পারেন। এই ধরনের একটি সেট আপ দেখতে কেমন হবে:

...
// Some code above

try {
  // Put the exception-prone code here
} catch (NullPointerException npe) {
  // Define what needs to be done when an NPE is caught
}

// Some code below
...

এটি এমন পরিস্থিতিতে ঘটে যেখানে একটি নির্দিষ্ট রেফারেন্স ভেরিয়েবল নাল থাকতে পারে বা নাও থাকতে পারে। প্রায়শই, দূরবর্তী API প্রতিক্রিয়া, ডিভাইস ইন্টারফেস প্রতিক্রিয়া এই দৃশ্যের প্রবণ হয়। একটি ফলাফল বা হার্ডওয়্যারের প্রাপ্যতার উপর নির্ভর করে, প্রতিক্রিয়া ভেরিয়েবল একটি তাত্ক্ষণিক বস্তুকে নির্দেশ করতে পারে বা নাও করতে পারে। নিরাপত্তা পরীক্ষা ব্যবহার করা এই পরিস্থিতিগুলি পরিচালনা করার জন্য সবচেয়ে উপযুক্ত৷

কিছু ​​অ্যাক্সেস করার আগে শূন্যের জন্য চেক করুন

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

...
// Some code above

If (myVar !== null ) {
  // Put the success logic here
} else {
  // Handle null value here
}

// Some code below
...

দুটি পদ্ধতির মধ্যে সবচেয়ে বড় পার্থক্য হল চেকের সুযোগ যা তারা করে। if মেথড শুধুমাত্র নাল মানগুলির জন্য myVar ভেরিয়েবল চেক করে, যখন ট্রাই-ক্যাচ ব্লক যেকোন এবং সমস্ত ভেরিয়েবলকে ক্যাচ করে যা নাল।

এটি আপনার অ্যাপ্লিকেশন যুক্তিতে নাল পয়েন্টারগুলিকে মিটমাট করার জন্য আরও লক্ষ্যযুক্ত এবং পরিষ্কার পদ্ধতিকে ব্লক করে। যাইহোক, যদি একাধিক ভেরিয়েবল থাকে যা শূন্য হতে পারে, তাহলে সরলতার জন্য একটি ট্রাই-ক্যাচ ব্লক দিয়ে যাওয়াই ভালো।

উপসংহার

এই নিবন্ধটি জাভাতে নাল পয়েন্টার ব্যতিক্রম কী এবং কীভাবে এই ত্রুটিটি ঘটে তা দেখে নেওয়া হয়েছে। আমরা এমন একটি কোডের দিকেও তাকিয়েছি যা বাস্তব জীবনের পরিস্থিতিতে কীভাবে নাল পয়েন্টার তৈরি হয় তা বোঝার জন্য একটি নাল পয়েন্টার ব্যতিক্রম ঘটাবে। অবশেষে, আমরা একটি নাল পয়েন্টার এক্সেপশন ঠিক করার কিছু শীর্ষ উপায় চিহ্নিত করার জন্য সেট করেছি এবং NPE ঠিক করার দুটি পদ্ধতির মধ্যে বৈসাদৃশ্য করে আমাদের আলোচনা শেষ করেছি।

আপনি যদি জাভা প্রোগ্রাম লিখতে চান, একটি নাল পয়েন্টার ব্যতিক্রম হল একটি প্রয়োজনীয় বাগ যা আপনাকে অবশ্যই জানতে হবে কিভাবে ঠিক করতে হয়। এই ব্যতিক্রমটি সবচেয়ে ঘন ঘন সমস্যাগুলির মধ্যে একটি এবং এটি আপনার কোডের সিনট্যাক্স বা শব্দার্থবিদ্যার সাথে সম্পর্কিত নয়। এটি ব্যতিক্রমটিকে চিহ্নিত করা এবং ঠিক করার জন্য সবচেয়ে জটিল সমস্যাগুলির মধ্যে একটি করে তোলে। এই নিবন্ধের মতো সমস্যা সমাধানের জন্য একটি দ্রুত রেফারেন্স আপনার অভিজ্ঞতাকে আরও মসৃণ করতে বাধ্য।


  1. কিভাবে javascript:void(0) ত্রুটি ঠিক করবেন

  2. কিভাবে ত্রুটি 502 খারাপ গেটওয়ে সমাধান করবেন?

  3. Netflix সাইট ত্রুটি:এই ত্রুটিটি কীভাবে সমাধান করবেন

  4. কীভাবে ERR_NETWORK_CHANGED Chrome ত্রুটি সমাধান করবেন