Nulles rādītāja izņēmums Java

NullPointerException Java ir RuntimeException. Tas notiek, kad programma mēģina izmantot objekta atsauci, kurai ir nulles vērtība. Java valodā “null” ir īpaša vērtība, ko var piešķirt objektu atsaucēm, lai norādītu uz vērtības neesamību.

Nulles rādītāja izņēmuma iemesli

NullPointerException rodas šādu iemeslu dēļ: 

  • Metodes izsaukšana no nulles objekta.
  • Piekļuve nulles objekta laukam vai tā modificēšana.
  • Ņemot nulles garumu tā, it kā tas būtu masīvs.
  • Piekļuve nulles objektu slotiem vai to modificēšana tā, it kā tas būtu masīvs.
  • Mest nulli, it kā tā būtu Throwable vērtība.
  • Kad mēģināt sinhronizēt, izmantojot nulles objektu.

Piemērs:

Java
   public     class   Geeks     {          public     static     void     main  (  String  []     args  )     {          // Reference set to null      String     s     =     null  ;             System  .  out  .  println  (  s  .  length  ());         }   }   

Izvade:

 Hangup (SIGHUP)   
Exception in thread 'main' java.lang.NullPointerException
at Geeks.main(Geeks.java:10)

Paskaidrojums: Šajā piemērā virknes atsauce “s” ir nulle. Kad programma mēģina izsaukt long() metodi, tā izmet NullPointerException, jo faktiskā objekta nav.

Kāpēc Java tiek izmantots null?

Nulles vērtība kalpo kā vietturis un norāda, ka atsauces mainīgajam nav piešķirta vērtība. Kopējās lietojumprogrammas ietver:

  • Saistītās datu struktūras : tas apzīmē saraksta vai koka zara beigas.
  • Dizaina modeļi : To izmanto tādos modeļos kā Null Object Pattern vai Singleton Pattern.

Kā izvairīties no NullPointerException

Lai izvairītos no NullPointerException, mums ir jāpārliecinās, ka visi objekti ir pareizi inicializēti pirms to izmantošanas. Kad mēs deklarējam atsauces mainīgo, mums ir jāpārbauda, ​​vai objekts nav nulles, pirms mēs pieprasām no objektiem metodi vai lauku.

1. String Literals izmantošana vienādībā ()

Ļoti izplatīta gadījuma problēma ietver virknes mainīgā un literāla salīdzināšanu. Literāls var būt virkne vai Enum elements. Tā vietā, lai izsauktu metodi no nulles objekta, apsveriet iespēju to izsaukt no literāla. 

Piemērs:

Java
   import     java.io.*  ;   class   Geeks     {      public     static     void     main     (  String  []     args  )     {          // Initializing String variable with null value      String     s     =     null  ;      // Checking if s.equals null      try      {      // This line of code throws NullPointerException because s is null      if     (  s  .  equals  (  'gfg'  ))      System  .  out  .  print  (  'Same'  );      else         System  .  out  .  print  (  'Not Same'  );      }      catch  (  NullPointerException     e  )      {      System  .  out  .  print  (  'NullPointerException Caught'  );      }      }   }   

Izvade
NullPointerException Caught 

Mēs varam izvairīties no NullPointerException, izsaucot vienlīdzību burtiski, nevis objektā.

Java
   import     java.io.*  ;   class   Geeks     {      public     static     void     main     (  String  []     args  )     {          // Initializing String variable with null value      String     s     =     null  ;      // Checking if s is null using try catch      try      {      if     (  'gfg'  .  equals  (  s  ))      System  .  out  .  print  (  'Same'  );      else         System  .  out  .  print  (  'Not Same'  );         }      catch  (  NullPointerException     e  )      {      System  .  out  .  print  (  'Caught NullPointerException'  );      }      }   }   

Izvade
Not Same 

Piezīme : Vienmēr izsaukt vienāds ar burtu, lai izvairītos no metodes izsaukšanas uz nulles atsauci.

2. Pārbaudes metodes argumenti

Pirms jaunās metodes pamatteksta izpildes mums vispirms jāpārbauda tās argumenti nulles vērtībām un jāturpina metodes izpilde tikai tad, kad argumenti ir pareizi pārbaudīti. Pretējā gadījumā tas parādīs IllegalArgumentException un paziņos izsaukšanas metodei, ka kaut kas nav kārtībā ar nodotajiem argumentiem. 

Piemērs:

Java
   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )     {          // String s set an empty string and calling getLength()      String     s     =     ''  ;          try     {      System  .  out  .  println  (  getLength  (  s  ));      }      catch     (  IllegalArgumentException     e  )     {      System  .  out  .  println  (      'IllegalArgumentException caught'  );      }      // String s set to a value and calling getLength()      s     =     'GeeksforGeeks'  ;          try     {      System  .  out  .  println  (  getLength  (  s  ));      }      catch     (  IllegalArgumentException     e  )     {      System  .  out  .  println  (      'IllegalArgumentException caught'  );      }      // Setting s as null and calling getLength()      s     =     null  ;          try     {      System  .  out  .  println  (  getLength  (  s  ));      }      catch     (  IllegalArgumentException     e  )     {      System  .  out  .  println  (      'IllegalArgumentException caught'  );      }      }      public     static     int     getLength  (  String     s  )      {      if     (  s     ==     null  )      throw     new     IllegalArgumentException  (      'The argument cannot be null'  );          return     s  .  length  ();      }   }   

Izvade
0 13 IllegalArgumentException caught  

3. Izmantojiet trīskāršu operatoru

Trīskāršo operatoru var izmantot, lai izvairītos no NullPointerException. Vispirms tiek novērtēta Būla izteiksme. Ja izteiksme ir patiesa, tiek atgriezta vērtība1, pretējā gadījumā tiek atgriezta vērtība2. Mēs varam izmantot trīskāršo operatoru, lai apstrādātu nulles rādītājus.

Piemērs:

Java
   import     java.io.*  ;   class   Geeks     {      public     static     void     main  (  String  []     args  )      {      String     s     =     null  ;      String     m     =     (  s     ==     null  )     ?     ''     :     s  .  substring  (  0       5  );      System  .  out  .  println  (  m  );      s     =     'Geeksforgeeks'  ;      m     =     (  s     ==     null  )     ?     ''     :     s  .  substring  (  0       5  );      System  .  out  .  println  (  m  );      }   }   

Izvade
Geeks  

Paskaidrojums : trīskāršais operators palīdz pārbaudīt nulles vērtību un izvairīties no darbībām ar nulles atsaucēm.

4. Izvēles klases izmantošana (Java 8+)

Programmā Java 8 Optional klase tika ieviesta kā konteinera objekts, kas var saturēt vai nesatur vērtību, kas nav nulle. Tas palīdz izvairīties NullPointerException piespiežot nepārprotami apstrādāt gadījumu, kad vērtības nav.

Piemērs:

Java
   import     java.util.Optional  ;   public     class   OptionalExample     {      public     static     void     main  (  String  []     args  )     {      Optional   <  String  >     name     =     Optional  .  ofNullable  (  null  );      // Safe way to access      System  .  out  .  println  (  name  .  orElse  (  'Default Name'  ));     // prints: Default Name      }   }   

Izvade
Default Name  

Paskaidrojums: Optional.ofNullable(value) aplauj vērtību, kas varētu būt nulle. orElse() nodrošina atkāpšanos, ja vērtības nav.


Jums Varētu Patikt