คุณสังเกตเห็น java.lang.NullPointerException (NPE) หรือไม่ 8 แนวทางปฏิบัติที่ดีที่สุดเพื่อหลีกเลี่ยงรันไทม์ NPE ใน Java

เผยแพร่แล้ว: 2020-10-07
คุณสังเกตเห็น java.lang.NullPointerException (NPE) หรือไม่ 8 แนวทางปฏิบัติที่ดีที่สุดเพื่อหลีกเลี่ยงรันไทม์ NPE ใน Java

หลีกเลี่ยง Null Pointer Exception ใน Java และ Java Tips และแนวทางปฏิบัติที่ดีที่สุดเพื่อหลีกเลี่ยง NullPointerException ใน Java

ในฐานะนักพัฒนา Java ฉันแน่ใจว่าคุณต้องเผชิญกับ Null Pointer Exception (NPE) ตั้งแต่วันแรก ในกรณีส่วนใหญ่ข้อยกเว้นของ NPE แสดงการติดตามสแต็กที่ชัดเจนซึ่งพินชี้สาเหตุรากของสิ่งเดียวกัน แต่ในกรณีของแอปพลิเคชันระดับองค์กรขนาดใหญ่ที่คุณมีคลาสหลายร้อยคลาส การค้นหาสาเหตุที่แท้จริงจะกลายเป็นฝันร้าย

ข้อยกเว้นตัวชี้ Null (NPE) คืออะไร?

NullPointerException (NPE) เป็นข้อยกเว้นที่เกิดขึ้นเมื่อคุณพยายามใช้การอ้างอิงที่ชี้ไปยังตำแหน่งที่ไม่มีในหน่วยความจำ (null) ราวกับว่ามันถูกอ้างอิงถึงวัตถุ

การเรียกใช้เมธอดบนการอ้างอิง null หรือพยายามเข้าถึงฟิลด์ของการอ้างอิงค่า null จะทริกเกอร์ NPE นี่เป็นสาเหตุที่พบบ่อยที่สุด

ตาม JavaDoc ด้านล่างเป็นสาเหตุหลักของ NPE:

  • โยน null ราวกับว่ามันเป็นค่า Throwable
  • การเรียกเมธอดอินสแตนซ์ของอ็อบเจกต์ null
  • การเข้าถึงหรือแก้ไขฟิลด์ของวัตถุ null
  • ใช้ความยาวของ null ราวกับว่าเป็นอาร์เรย์
  • การเข้าถึงหรือแก้ไขสล็อตของ null ราวกับว่าเป็นอาร์เรย์

ตอนนี้คำถามที่แท้จริงคือจะหลีกเลี่ยง java.lang.NullPointerException ที่รันไทม์ได้อย่างไร ในบทช่วยสอนนี้ เราจะดูตัวอย่างบางส่วนที่สร้าง NPE ขณะรันไทม์และขั้นตอนที่เราจำเป็นต้องดำเนินการเพื่อแก้ไขปัญหานี้

มาสร้าง NPE กันที่รันไทม์ที่ 1 กัน ดูตัวอย่างด้านล่าง CrunchifyNullPointerExceptionTips.java

เราจะสร้าง NPE 3 วิธีที่แตกต่างกัน

  1. NPE จะถูกโยนทิ้งหากคุณพยายามเข้าถึง null Object
  2. NPE จะถูกโยนทิ้งหากคุณพยายามแปลงค่า null String
  3. NPE จะถูกโยนทิ้งหากคุณพยายามเข้าถึง null Object ระหว่างการเริ่มต้นคลาส

สร้างคลาส CrunchifyNullPointerExceptionTips.java

ผลลัพธ์:

มีเคล็ดลับและกลเม็ดเล็ก ๆ น้อย ๆ ที่เราสามารถใช้เพื่อหลีกเลี่ยง NullPointerException ที่รันไทม์ได้ ลองมาดูกัน

คำแนะนำ 1:

Eclipse / IntelliJ IDE จะพยายามแสดง NPE ในพื้นที่ทำงาน แก้ไขรหัสของคุณในระหว่างการพัฒนาเท่านั้น

คำแนะนำตัวชี้ Null ใน Eclipse

คำแนะนำ 2:

เพิ่ม crunchifyI sNullorEmpty () ตรวจสอบก่อนดำเนินการกับวัตถุ เพิ่มลงใน CrunchifyNullPointerExceptionTips.java

ในบรรทัดโปรแกรม Java ด้านบน 55 และ 56 จะถูกแทนที่ด้วยสิ่งนี้

คำแนะนำ 3:

ตรวจสอบว่า String เป็น null หลังจากการดำเนินการ trim()

คำแนะนำ 4:

ใช้ Try Catch block เสมอ เพื่อป้องกันกระบวนการรันไทม์อย่างต่อเนื่อง

คำแนะนำ 5:

Collections.emptyList() เป็นที่ต้องการเนื่องจากการจัดการยาชื่อสามัญได้ดีกว่า

คำแนะนำ 6:

ใช้ Java Assertions

การยืนยันเป็นคำสั่งที่ช่วยให้คุณสามารถทดสอบสมมติฐานของคุณเกี่ยวกับโค้ดของคุณได้ ตัวอย่างเช่น หากคุณเขียนวิธีการที่ส่งกลับชื่อในระบบ คุณอาจยืนยันว่าการส่งคืน otherName ถ้าสตริงเป็นค่าว่าง

การใช้การยืนยันขั้นพื้นฐานจะเป็น:

แต่มีสิ่งที่จับได้: การยืนยันไม่พร้อมใช้งานในสภาพแวดล้อมการใช้งานจริง และเราไม่ควรใช้การยืนยันกับตรรกะทางธุรกิจใดๆ

คำแนะนำ 7:

ลองใช้ containsKey() , containsValue() , contains() ตรวจสอบ

คำแนะนำ 8:

โดยสรุปแล้ว แนวทางปฏิบัติที่ดีเสมอในการดูแล NPE ระหว่างการพัฒนา แทนที่จะดีบั๊กในการผลิตที่รันไทม์ มีเคล็ดลับและลูกเล่นอื่นๆ อีกจำนวนหนึ่งที่ใช้ได้โดยใช้ Spring Framework Annotation, Factory Pattern , Null Object Pattern เป็นต้น แต่ฉันจะย่อให้สั้นกว่านี้

จะเผยแพร่บทช่วยสอนใหม่น่าจะในหนึ่งสัปดาห์เกี่ยวกับบทช่วยสอนนี้ คอยติดตาม.

คุณต้องการเพิ่มเติมอะไรในบทช่วยสอนนี้ หรือพบปัญหา โปรดพูดคุยและแสดงความคิดเห็นของคุณ