اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

java.lang.NullPointerException تعني أن الكائن عبارة عن null وتحاول ان تستدعي دالة بداخله ويمكنك معالجة الامر باستخدام try catch ولكن لايوصى بذلك وعوضاً عن ذلك يمكنك استخدام هذه الطريقة:

if(someVariable != null){
someVariable.doSomething();//في حالة أن المتغير ليس null
}else{
    // الكود في حالة أن المتغير null
}

 

  • 0
نشر

NullPointerException هو عبارة عن إستثناء يتم رميه عندما تقوم بتعريف متغير  ولكنك لم تقم بإنشاء كائن وتعيينه إلى هذا المتغير أي أنه يكون يشير إلى Null ثم تستدعي أحد الدوال عليه.

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

Employee e;
System.out.println(e);

سيُعطيك المُترجم الخطأ التالي:

variable e might not have been initialized

لكن أحياناً أخرى قد تكتب كود لا يقوم بإنشاء الكائن مُباشرة بل يتم إنشاؤه بشكل غير مُباشر مثلاً: 

لدينا صنف الموظف التالي:

class Employee{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name.toUpperCase();
    }
}

ثم نقوم بإنشاء كائن من الصنف Employee بهذا الشكل: 

Employee e = new Employee();

إلى الآن لا توجد أي مُشكلة، لكن في هذه اللحظة عند إنشائنا لكائن من النوع Employee فإن الخاصية name تُشير إلى null 

و بالتالي إذا ما قمنا بطباعة المُتغير e بهذا الشكل:

System.out.println(e);

فإنه سيتم إستدعاء الدالة toString وهذه الدالة تقوم بإرجاع الإسم بحروف كبيرة أي تستدعي الدالة toUpperCase على الخاصية name لكن كما تعلم فنحن لم نُسند للخاصية name اي قيمة فهي تُشير إلى null و هنا سيتم رمي الإستثناء NullPointerException.

طرق مُعالجة الأمر كثيرة فمثلاً يُمكنك إستخدام try catch و يتم ذلك بوضع الكود الذي نشك أن فيه خلل و أنه سيُسبب في رمي الإستثناء في البلوك try و في البلوك catch نقوم بالمعالجة

try {
	Employee e = new Employee();
	System.out.println(e);
} catch (NullPointerException ex) {
	System.out.println(ex.getMessage());
}

. او نقوم بالتحقق من المُتغير إذا كان لا يُساوي null نقوم بالعملية التي نريد بهذا الشكل في مثالنا:

@Override
  public String toString() {
  if (name != null)
    return name.toUpperCase();
  return "Employee name property == null";
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...