الحالات التي يتم فيها طرح java.lang.nullpointerexception
غالبا ما يكون لدينا هذا الخطأ في برامجنا. java.lang.NullPointerException. يتم بدء تشغيل هذا الخطأ عند محاولة استخدام كائن فارغ ليس له قيمة في الحالات التالية:- استدعاء مثيل أسلوب فارغ.
- الوصول إلى مثيل كائن فارغ أو تعديله.
- يهدف الاستثناء إلى رمي.
- عند استدعاء طول الصفيف الفارغ. li>
- عند الوصول إلى مواقع فارغة مثل array.
- عند مزامنة كائن فارغ أو استخدامه داخل كتلة متزامنة.
تتم الإشارة إلى الكائنات بواسطة مؤشرات في java< / h2 >الكائن عبارة عن مثيل فئة أو صفيف ، والمراجع هي مؤشرات لهذه الكائنات والمرجع الفارغ هو المراجع إلى no object.
عندما تعلن متغيرا ، تقوم Java بتعيين المتغير x إلى 0 ويتم إنشاء مؤشر يشير إلى هذا الكائن. على سبيل المثال ، في الكود التالي ، سنعلن عن متغير x:
< pre class = "prettyprint lang-java">int x ؛
x = 5 ؛
في هذا المثال، يتم تعيين المتغير x إلى الصفر بشكل افتراضي، ويتم كتابة السطر الثاني، القيمة 5، إلى موقع الذاكرة المشار إليه بواسطة x. تمنع Java المبرمج من معالجة صناديق الذاكرة ، فهي تتيح لك الوصول فقط إلى طرق الكائن وليس موقع الذاكرة.
Cases أو يتم طرح NullPointerException < / h2>1) استدعاء طريقة مثيل null
نقطة النقطة = فارغة ؛
dot.getX();
< / pre>< / div> استثناء في الموضوع "main" java.lang.NullPointerException
at Test.main (Test.java: 27)
< / pre>2) الوصول إلى مثيل كائن فارغ أو تعديله.
يؤدي الوصول إلى مرجع فارغ إلى رفع الاستثناء NullPointerException:
Point dot = null;
dot.getX();
< / pre> استثناء في الموضوع "الرئيسي" java.lang.NullPointerException
في Test.main (Test.java: 38)
< / pre>3) عند استخدام throw null
throw < / i> يتحقق من أن الوسيطة غير فارغة ، وإذا كان صفرا ، فإنه يرتفع NullPointerException.
IOException nullException = null;
try {
رمي nullException ؛
} catch (IOException e) {
e.printStackTrace();
} < / pre>< / div>4) عند استدعاء طول الصفيف الفارغ
< pre class = "prettyprint lang-java" >char[] ch = null ؛
int الطول = ch.length ؛ < / pre>5) عند الوصول إلى مواقع فارغة مثل صفيف < br / >< div>مثال على ذلك هو الوصول إلى مربعات صفيف null.
char[] ch = null;
char c = ch[0]; < / pre>< / div>6) عند مزامنة nullتحصل على NullPointerException إذا كنت تحاول مزامنة كائن null < / i> أو وضعه داخل كتلة متزامنة.
Thread th=null;
synchronized (th) {
System.out.print ("هذا الموضوع متزامن") ؛
}
ما هي وسائل الوقاية
- أفضل طريقة لتجنب هذا النوع من الاستثناءات في حال لم تقم بإنشاء الكائن بنفسك هو التحقق مما إذا كان الكائن صفرا. يجب كتابة الكود على النحو التالي: < / li>
void display (عبارة سلسلة) {
// تحقق مما إذا كانت الجملة ليست فارغة
if (phrase!=null)
System.out.print(عبارة);
}
هذا الحل ليس مثاليا في بعض الحالات لأن الكائن فارغ لذلك لا يحدث شيء في إجراء display().
في IDEs مثل Eclipse أو Netbeans، يتم عرض رقم السطر الذي أدى إلى حدوث الخطأ. هذه طريقة جيدة لتحديد نوع الخطأ. يمكن أن يكون للمتغيرات < / li> قيمة افتراضية مثل السلسلة في هذا الرمز:
< / li>
سلسلة سلسلة = "";
< / pre>< / ul >< li>تهيئة مربعات الاختيار بعد الإعلان عن صفيف.< / li>
/ / إعلان < br / > خيط [] th = مؤشر ترابط جديد [3] ؛
/ / تهيئة < br / >th [0] = مؤشر ترابط جديد ();
th [1] = مؤشر ترابط جديد ();
th [2] = مؤشر ترابط جديد ();
< / pre>< / ul>
استخدم المتغيرات المنطقية والعدادات,... إلخ لتحسين الكود الخاص بك.< / li>< / ul>< / div>
نقطة النقطة = فارغة ؛
dot.getX();
< / pre>< / div>يؤدي الوصول إلى مرجع فارغ إلى رفع الاستثناء NullPointerException:استثناء في الموضوع "main" java.lang.NullPointerException
at Test.main (Test.java: 27)
< / pre>2) الوصول إلى مثيل كائن فارغ أو تعديله.Point dot = null;
dot.getX();
< / pre>استثناء في الموضوع "الرئيسي" java.lang.NullPointerException
في Test.main (Test.java: 38)
< / pre>3) عند استخدام throw nullthrow < / i> يتحقق من أن الوسيطة غير فارغة ، وإذا كان صفرا ، فإنه يرتفع NullPointerException.IOException nullException = null;
try {
رمي nullException ؛
} catch (IOException e) {
e.printStackTrace();
} < / pre>< / div>4) عند استدعاء طول الصفيف الفارغ
< pre class = "prettyprint lang-java" >char[] ch = null ؛
int الطول = ch.length ؛ < / pre>5) عند الوصول إلى مواقع فارغة مثل صفيف < br / >< div>مثال على ذلك هو الوصول إلى مربعات صفيف null.char[] ch = null;
char c = ch[0]; < / pre>< / div>6) عند مزامنة nullتحصل على NullPointerException إذا كنت تحاول مزامنة كائن null < / i> أو وضعه داخل كتلة متزامنة.Thread th=null;
synchronized (th) {
System.out.print ("هذا الموضوع متزامن") ؛
}ما هي وسائل الوقاية
- أفضل طريقة لتجنب هذا النوع من الاستثناءات في حال لم تقم بإنشاء الكائن بنفسك هو التحقق مما إذا كان الكائن صفرا. يجب كتابة الكود على النحو التالي: < / li>
void display (عبارة سلسلة) {هذا الحل ليس مثاليا في بعض الحالات لأن الكائن فارغ لذلك لا يحدث شيء في إجراء display().
// تحقق مما إذا كانت الجملة ليست فارغة
if (phrase!=null)
System.out.print(عبارة);
}في IDEs مثل Eclipse أو Netbeans، يتم عرض رقم السطر الذي أدى إلى حدوث الخطأ. هذه طريقة جيدة لتحديد نوع الخطأ. يمكن أن يكون للمتغيرات < / li> قيمة افتراضية مثل السلسلة في هذا الرمز:
< / li>سلسلة سلسلة = "";
< / pre>< / ul >< li>تهيئة مربعات الاختيار بعد الإعلان عن صفيف.< / li>/ / إعلان < br / > خيط [] th = مؤشر ترابط جديد [3] ؛
/ / تهيئة < br / >th [0] = مؤشر ترابط جديد ();
th [1] = مؤشر ترابط جديد ();
th [2] = مؤشر ترابط جديد ();
< / pre>< / ul>استخدم المتغيرات المنطقية والعدادات,... إلخ لتحسين الكود الخاص بك.< / li>< / ul>< / div>