حقائق مثيرة للاهتمام حول null في Java

ترتبط جميع لغات البرمجة تقريبًا بالقيمة 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 له قيمة افتراضية باطل

Java
   public     class   Test   {      private     static     Object     obj  ;         public     static     void     main  (  String     args  []  )      {      // it will print null;      System  .  out  .  println  (  &  quot  ;  Value     of     object     obj     is     :     &  quot  ;     +     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 إذا تم تعيين قيمة فارغة لنوع البيانات المعبأة البدائية. 

Java
   public     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 لاختبار ما إذا كان الكائن هو مثيل من النوع المحدد (فئة أو فئة فرعية أو واجهة). في وقت التشغيل، تكون نتيجة عامل التشغيل صحيحة إذا لم تكن قيمة التعبير فارغة. هذه خاصية مهمة لمثيل العملية مما يجعلها مفيدة في عمليات التحقق من الكتابة. 

Java
   public     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. 

Java
   public     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  (      &  quot  ;     static     method        can     be     called     by     null     reference     &     quot  ;);      }      private     void     nonStaticMethod  ()      {      // Can not be called by null reference      System  .  out  .  print  (  &  quot  ;      Non     -     static     method     -     &  quot  ;);      System  .  out  .  println  (      &  quot  ;      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. 

Java
   public     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' بطباعة الوسيطة التي تم تمريرها من الطريقة الرئيسية.

Java
   import     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 سوف يلقي رسالة خطأ كـ ' أنواع المعاملات السيئة للمشغل الثنائي '+' '

Java
   import     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