احمد صوالحة نشر 16 فبراير 2021 أرسل تقرير نشر 16 فبراير 2021 يظهر لدي الخطأ التالي عند محاولة تشغيل برنامج بلغة java : java.lang.NullPointerException ما هو سبب ظهوره ؟ وكيف أعالج هذه المشكلة؟ 1 اقتباس
0 عبد الله محمد5 نشر 16 فبراير 2021 أرسل تقرير نشر 16 فبراير 2021 java.lang.NullPointerException تعني أن الكائن عبارة عن null وتحاول ان تستدعي دالة بداخله ويمكنك معالجة الامر باستخدام try catch ولكن لايوصى بذلك وعوضاً عن ذلك يمكنك استخدام هذه الطريقة: if(someVariable != null){ someVariable.doSomething();//في حالة أن المتغير ليس null }else{ // الكود في حالة أن المتغير null } 1 اقتباس
0 سمير عبود نشر 16 فبراير 2021 أرسل تقرير نشر 16 فبراير 2021 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"; } اقتباس
السؤال
احمد صوالحة
يظهر لدي الخطأ التالي عند محاولة تشغيل برنامج بلغة java :
java.lang.NullPointerException
ما هو سبب ظهوره ؟ وكيف أعالج هذه المشكلة؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.