ترتبط جميع لغات البرمجة تقريبًا بالقيمة null. لا يكاد يوجد مبرمج لا ينزعج من القيمة الفارغة. في Java يرتبط null بـ java.lang. NullPointerException . نظرًا لأنها فئة في حزمة java.lang، يتم استدعاؤها عندما نحاول إجراء بعض العمليات مع أو بدون قيمة فارغة وأحيانًا لا نعرف حتى مكان حدوثها. فيما يلي بعض النقاط المهمة حول null في Java والتي يجب أن يعرفها كل مبرمج Java:
سلسلة إلى حرف
- في Java null هي قيمة خاصة تمثل غياب القيمة أو المرجع. يتم استخدامه للإشارة إلى أن المتغير أو الكائن ليس له قيمة مخصصة له حاليًا.
- القيمة الخالية ليست هي نفس السلسلة الفارغة أو المصفوفة الفارغة. السلسلة الفارغة هي سلسلة لا تحتوي على أحرف بينما المصفوفة الفارغة هي مصفوفة لا تحتوي على عناصر.
- تحتوي لغة برمجة Java على نوع فارغ مضمن يسمى "null" وهو نوع فرعي لجميع أنواع المراجع. ومع ذلك، لا يمكن استخدامه كنوع لمتغير لأنه لا يحتوي على أي مثيل ولا يمكن إنشاء مثيل له.
- من أفضل الممارسات التحقق من القيم الخالية قبل إجراء أي عمليات عليها لتجنب مخاطر NullPointerException (NPE). يعتبر NPE أحد الاستثناءات الأكثر شيوعًا في Java ويمكن أن يسبب سلوكًا غير متوقع أو تعطلًا في البرنامج.
- في Java، يُستخدم أيضًا null للإشارة إلى أن الطريقة لا تُرجع أي قيمة. يُعرف هذا بنوع الإرجاع "الباطل". لا تُرجع الطريقة الفارغة أي قيمة وتُستخدم عادةً لتنفيذ إجراء مثل الطباعة إلى وحدة التحكم أو تحديث قاعدة البيانات.
- بالإضافة إلى ذلك، يمكن استخدام null كقيمة افتراضية للمعلمات الاختيارية في إحدى الطرق. يسمح هذا باستدعاء طريقة دون تحديد قيمة لتلك المعلمة وسيتم استخدام القيمة الخالية بدلاً من ذلك.
- لا يُنصح باستخدام القيمة null كقيمة لمتغير أو كائن مخصص للاحتفاظ بقيمة نوع بيانات بدائي مثل int أو double لأنه سيؤدي إلى حدوث خطأ في وقت الترجمة.
- يمكن أن يكون استخدام null في Java مصدرًا للارتباك والأخطاء الدقيقة، لذا من المهم أن تكون على دراية بسلوكه وكيفية التعامل معه بشكل صحيح في التعليمات البرمجية الخاصة بك لمنع الأخطاء.
1. null حساس لحالة الأحرف: null هو حرفي في Java ولأن الكلمات الرئيسية موجودة حساسية الموضوع في جافا لا يمكننا كتابة NULL أو 0 كما هو الحال في لغة C.
Java
public class Test { public static void main (String[] args) throws java.lang.Exception { // compile-time error : can't find symbol 'NULL' Object obj = NULL; //runs successfully Object obj1 = null; } }
الإخراج:
5: error: cannot find symbol
can't find symbol 'NULL'
^
variable NULL
class Test
1 error
2. القيمة المتغيرة المرجعية: أي متغير مرجعي في Java له قيمة افتراضية باطل .
Javapublic class Test { private static Object obj; public static void main(String args[]) { // it will print null; System.out.println("Value of object obj is : " + obj); } }
الإخراج:
Value of object obj is : null 3. نوع الصفر: على عكس المفهوم الخاطئ الشائع، فإن القيمة null ليست كائنًا ولا هي نوع. إنها مجرد قيمة خاصة يمكن تخصيصها لأي نوع مرجعي ويمكنك كتابة cast null لأي نوع أمثلة:
// null can be assigned to String
String str = null;
// you can assign null to Integer also
Integer itr = null;
// null can also be assigned to Double
Double dbl = null;
// null can be type cast to String
String myStr = (String) null;
// it can also be type casted to Integer
Integer myItr = (Integer) null;
// yes it's possible no error
Double myDbl = (Double) null;
4. التشغيل التلقائي والفتح: أثناء عمليات الملاكمة التلقائية وإلغاء التغليف، يقوم المترجم ببساطة بإلقاء خطأ استثناء Nullpointer إذا تم تعيين قيمة فارغة لنوع البيانات المعبأة البدائية.
Javapublic class Test { public static void main(String[] args) throws java.lang.Exception { // An integer can be null so this is fine Integer i = null; // Unboxing null to integer throws // NullpointerException int a = i; } }
الإخراج:
Exception in thread 'main' java.lang.NullPointerException
at Test.main(Test.java:6)
5. مثيل المشغل: يتم استخدام عامل تشغيل Java لاختبار ما إذا كان الكائن هو مثيل من النوع المحدد (فئة أو فئة فرعية أو واجهة). في وقت التشغيل، تكون نتيجة عامل التشغيل صحيحة إذا لم تكن قيمة التعبير فارغة. هذه خاصية مهمة لمثيل العملية مما يجعلها مفيدة في عمليات التحقق من الكتابة.
Javapublic class Test { public static void main(String[] args) throws java.lang.Exception { Integer i = null; Integer j = 10; // prints false System.out.println(i instanceof Integer); // Compiles successfully System.out.println(j instanceof Integer); } }
الإخراج:
false
true
6. الطرق الثابتة وغير الثابتة: لا يمكننا استدعاء طريقة غير ثابتة على متغير مرجعي بقيمة فارغة، فسوف ترمي NullPointerException ولكن يمكننا استدعاء طريقة ثابتة بمتغيرات مرجعية ذات قيم فارغة. نظرًا لأن الطرق الثابتة مرتبطة باستخدام الربط الثابت، فإنها لن تؤدي إلى استثناء مؤشر Null.
Javapublic class Test { public static void main(String args[]) { Test obj = null; obj.staticMethod(); obj.nonStaticMethod(); } private static void staticMethod() { // Can be called by null reference System.out.println( " static method can be called by null reference & quot;); } private void nonStaticMethod() { // Can not be called by null reference System.out.print(" Non - static method - "); System.out.println( " cannot be called by null reference & quot;); } }
الإخراج:
static method can be called by null referenceException in thread 'main'
java.lang.NullPointerException
at Test.main(Test.java:5)
7. == و != يُسمح بالمقارنة وغير المساوية لعوامل التشغيل بـ null في Java. يمكن أن يكون هذا مفيدًا في التحقق من القيمة الخالية مع الكائنات في Java.
Javapublic class Test { public static void main(String args[]) { // return true; System.out.println(null == null); // return false; System.out.println(null != null); } }
الإخراج:
true
false
8 . يمكن تمرير "null" كوسيطة في الطريقة:
يمكننا تمرير القيمة الخالية كوسيطة في Java ويمكننا طباعتها. يجب أن يكون نوع بيانات الوسيطة هو النوع المرجعي. لكن نوع الإرجاع للطريقة يمكن أن يكون أي نوع مثل void int double أو أي نوع مرجعي آخر اعتمادًا على منطق البرنامج.
هنا ستقوم الطريقة 'print_null' بطباعة الوسيطة التي تم تمريرها من الطريقة الرئيسية.
Javaimport java.io.*; class GFG { public static void print_null(String str) { System.out.println('Hey I am : ' + str); } public static void main(String[] args) { GFG.print_null(null); } }
الإخراج :
هاي انا: null
9. عامل التشغيل "+" فارغ:
يمكننا تسلسل القيمة الخالية مع متغيرات السلسلة في Java. ويعتبر سلسلة في جافا.
هنا سيتم ربط القيمة الخالية فقط مع متغير السلسلة. إذا استخدمنا عامل التشغيل "+" بقيمة خالية وأي نوع آخر (عدد صحيح مزدوج وما إلى ذلك) بخلاف السلسلة، فسوف يؤدي ذلك إلى ظهور رسالة خطأ.
العدد الصحيح a=null+7 سوف يلقي رسالة خطأ كـ ' أنواع المعاملات السيئة للمشغل الثنائي '+' '
Javaimport java.io.*; class GFG { public static void main(String[] args) { String str1 = null; String str2 = '_value'; String output = str1 + str2; System.out.println('Concatenated value : ' + output); } }
الإخراج
Concatenated value : null_value