الرئيسية / جافا / أساسيات في البرمجة بالجافا / ما هو الخطأ NullPointer و كيف يتم إصلاحه، من الأخطاء الشائعة لدى مبرمجي الجافا

ما هو الخطأ NullPointer و كيف يتم إصلاحه، من الأخطاء الشائعة لدى مبرمجي الجافا

عند تنفيذ الشفرة المصدرية تظهر لك الأخطاء التي لم تنتبه لها أثناء البرمجة، من هذه الأخطاء Null pointer Exception.

لا يكون الخطأ Nullpointer واضحاً أثناء كتابة الشفرة المصدرية، فهو من الأخطاء التي تظهر أثناء التنفيذ Runtime Error.

ولكن على عكس ما يُتوقع فكثيراً يكون من السهل إيجاده، و في أحايين أخرى يكون مخفياً و يجب عليك متابعة الشفرة البرمجية لمعرفة أين وقع الخطأ و في أي مرحلة.

الآن ستتعرف على ما يسبب الخطأ Nullpointer و إذا ظهر لك الخطأ Nullpointer أثناء التنفيذ ما الذي يجب أن تفعله حتى تتخلص منه.

حل مشكلة null pointer exception

لماذا يظهر الخطأ NullPointer ؟

كما تعلم فإنه لإعداد المتغير يجب إجراء خطوتين:

  1. الإعلان عن المتغير Variable Declaration.
  2. تهيئة المتغير Variable initialization.

الإعلان عن المتغير مثل أن تخبر أحدهم بأن هناك شخصاً ما قادم و هو من أصدقائك، في الحقيقة هو لم يحضر بعد ولكن نعلم أنه سيأتي و أنه من أصدقائك.

فالإعلان عن المتغير في حقيقة لا يعني أن المتغير تم تعريفه، هذه أمثلة للإعلان عن المتغيرات

    int age;
    String name;
    Human ahmed;
    BigDecimal monthlyIncome;

أما تهيئة المتغير فهي الخطوة التي يتم فيها حجز مساحة للمتغير فعلياً في الذاكرة. أخوك قد حضر و أخذ مكانه في المجلس فعلياً.

عندها و عندها فقط بالإمكان التعامل مع هذا المتغير بإسناد القيم إليه و استخدام الدوال المتعلقة به.

ما يُسبب الخطأ NullPointer هو التعامل مع المتغير الذي تم الإعلان عنه فقط كأنه تم تعريفه و تهيئته، ففي هذه الحالة فأنت تتعامل مع شخص غير موجود و تحاول التحدث معه 🙂

عدم تهيئة المتغير أو إسناد القيمة null إليه نتيجتهما سواء، لأن null تحرر المتغير من قيمته و يُصبح بلا قيمة.

أمثلة لأخطاء NullPointer

        String flag;
        flag.getBytes();

        String exit = "yes";
        exit = null;
        exit.getBytes();

        String testArray[] = new String[5];
        testArray[0]="0";
        testArray[1]="1";
        testArray[2]="2";
        testArray[3]="3";
        
        for(int counter = 0; counter < testArray.length; counter++){
            testArray[counter].getBytes();
        }

        class Human{
            private String actualName;
            public Human(String name){
                actualName = name;
            }
            
            protected String getActualName(){
                return actualName;
            }//end getName
        }
        
        Human adam;        
        String firstHuman = adam.getActualName();

كيف تتغلب على الخطأ NullPointer إذا أصرّ على مواجهتك

ليس من الصعب حل مشكلة Null Pointer Exception غالباً، فالمترجم compiler إبتداءً يوفر لك معلومات مهمة لتستخدمها في محاولة حل الخطأ.

  • أهم هذه المعلومات هو رقم السطر الذي حدث به الخطأ، هذه هي البداية
null-pointer-exception
خطأ NullPointer
  • بعد تحديد الخطأ السطر الذي حدث به الخطأ، ابحث عن المتغيرات التي يتم التعامل معها في هذا السطر.
  • ابحث عن المتغير أو المتغيرات التي تم الإعلان عنها ولكن لم تتم تهيئتها أو لم تم إسناد القيمة null إليها قبل الوصول إلى سطر الخطأ.
  • أصلح الخطأ بإسناد القيمة المناسبة قبل الوصول إلى سطر الخطأ.

في الأمثلة السابقة سيكون الحل كما يلي

        String flag;
        flag= "AEE5F";//Initilaization
        flag.getBytes(); 

        String exit = "yes";
        //exit = null;
        exit.getBytes();

        String testArray[] = new String[5];
        testArray[0]="0";
        testArray[1]="1";
        testArray[2]="2";
        testArray[3]="3";
        testArray[4]="4";//Initialization
        
        for(int counter = 0; counter < testArray.length; counter++){
            testArray[counter].getBytes();
        }

class Human{
            private String actualName;
            public Human(String name){
                actualName = name;
            }
            
            protected String getActualName(){
                return actualName;
            }//end getName
        }
        
        Human adam;
        adam = new Human("adam");//Initialization
        String firstHuman = adam.getActualName();

هذه هي خطوات حل مشكلة NullPointer و التي يمر بها أغلب المبتدئين و التي تعتبر من أكثر الأخطاء البرمجية شيوعاً.. على كُلٍّ لا أعتقد أنه سيقف في طريقك إبتداءً من اليوم.

عن مصطفى الطيب

صديقٌ لنُظمِ المعلُومات و عُلومِ الحَاسِب و مُختصٌ بهما، مُحبٌ للعِلمِ و نَشرِه. أُشاركُ معارفي و تَجاربي و خِبراتي في تَدويناتٍ و دوراتٍ من خلال مُدونةِ عُلوم.

أضف تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *