JavaRush /จาวาบล็อก /Random-TH /การแปล: 6 ข้อยกเว้นของ Java ที่รบกวนผู้มาใหม่ใน Java
profeg
ระดับ

การแปล: 6 ข้อยกเว้นของ Java ที่รบกวนผู้มาใหม่ใน Java

เผยแพร่ในกลุ่ม

6 ข้อยกเว้น Java ที่หลอกหลอนผู้เริ่มต้น Java

(ต้นฉบับ) (ฉันยังใหม่กับทั้ง Java และภาษาอังกฤษ ดังนั้นฉันยินดีที่จะรับคำวิจารณ์และความช่วยเหลือ) ทั้งเมื่อก่อนและตอนนี้ฉันเจอมือใหม่ Java หลายคนที่มีปัญหากับข้อยกเว้นทั่วไปบางประการซึ่งฉันต้องอธิบายอีกครั้ง ฉันเชื่อว่านักพัฒนา Java อาวุโสคนอื่นๆ มีปัญหาเดียวกันในการพยายามช่วยมือใหม่จัดการกับข้อยกเว้นเหล่านี้ ดังนั้นฉันจึงเขียนบทความนี้เพื่อการพัฒนาของตัวเอง โปรดแสดงความคิดเห็นในบทความนี้หรือเพิ่มข้อยกเว้นในรายการด้านล่าง
1. NoClassDefFoundError
นี่เป็นหนึ่งในข้อยกเว้นเหล่านั้น โดยมีข้อความเช่น “Exception in thread “main” NoClassDefFoundError”ที่นักพัฒนา Java ใหม่ส่วนใหญ่พบในโลกของการเขียนโปรแกรม Java ผู้เริ่มต้นเขียนโปรแกรมที่แสดง “Hello world!” ไปที่บรรทัดคำสั่ง พิมพ์ “java …” กด Enter และ BAM! =) และหาวิธีให้โปรแกรมพิมพ์ “Hello world!” บนจอภาพต้องใช้เวลาพอสมควร NoClassDefFoundError เกิดขึ้นเมื่อ Java Virtual Machine (JVM) พยายามเข้าถึงคลาสเมื่อเริ่มต้นระบบ และไม่พบคลาส แม้ว่าจะพบคลาสเดียวกันในเวลาคอมไพล์ก็ตาม บ่อยครั้งที่ข้อยกเว้นนี้เกิดขึ้นเมื่อพยายามรันโปรแกรมโดยใช้คำสั่ง "java" และไม่ได้ตั้งค่า classpath อย่างถูกต้อง ต่อไปนี้เป็นคำอธิบายสาเหตุที่ทำให้เกิดข้อยกเว้นนี้
  • คลาสไม่พร้อมใช้งานใน -classpath
  • ตัวแปรสภาพแวดล้อม CLASSPATH ได้ถูกแทนที่แล้ว คุณสามารถตรวจสอบสถานะและความถูกต้องได้โดยใช้คำสั่ง Windows “set”
วิธีแก้ปัญหามีอธิบายไว้โดยละเอียด ที่นี่
นอกจากนี้ คุณต้องเข้าใจความแตกต่างระหว่างตัวแปรสภาพแวดล้อม CLASSPATH และคีย์ล่าม -classpath ผู้เชี่ยวชาญไม่แนะนำให้ใช้ CLASSPATH วิธีที่ดีที่สุดคือการส่งคีย์ -classpath ไปยังล่าม
2. ClassNotFoundException
ClassNotFoundException เป็นอีกหนึ่งข้อยกเว้นที่กลายเป็นฝันร้ายสำหรับมือใหม่ทันทีที่เขาเริ่มเขียนโปรแกรม สิ่งที่น่าสนใจคือนักพัฒนา Java โดยเฉลี่ยมักจะ สับสนระหว่าง ClassNotFoundException และ NoClassDefFoundError ข้อยกเว้น ดังนั้นความแตกต่างระหว่างข้อยกเว้นทั้งสองนี้จึงยังคงเป็น หนึ่งในคำถามที่ พบ บ่อยในการสัมภาษณ์ตำแหน่งจูเนียร์ ClassNotFoundException เกิดขึ้นเมื่อ JVM พยายามโหลดคลาสเฉพาะและไม่พบคลาสนั้นใน classpath หนึ่งในจุดทั่วไปที่นักพัฒนา Java ใหม่พบมันเป็นครั้งแรกคือการเชื่อมต่อกับฐานข้อมูลโดยใช้ไลบรารี JDBC ที่นั่นเราจะพยายามโหลดไดรเวอร์โดยใช้โค้ดเช่น Class.forName("JDBCdriver") บทความที่ดีเกี่ยวกับ ClassNotFoundException อยู่ที่ นี่ การพยายามทำความเข้าใจแนวคิดของ Java Classloadersเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการจัดการกับปัญหานี้ คุณสามารถอ่าน วิธีกำหนดค่า Java classpath ในสภาพแวดล้อม Win/ Unix ตามที่ระบุไว้ใน เอกสาร Javaมีข้อยกเว้นเกิดขึ้นในกรณีต่อไปนี้:
  • คุณพยายามโหลดคลาสโดยใช้เมธอด Class.forName และไฟล์ .class ไม่ได้อยู่ใน classpath นี่เป็นสถานการณ์ที่พบบ่อยที่สุดของทั้งสามรายการที่แสดงไว้ที่นี่
  • เมื่อคลาสโหลดเดอร์พยายามโหลดคลาสโดยใช้ loadClass
  • เมื่อตัวโหลดคลาสพยายามโหลดคลาสโดยใช้ findSystemClass
3. NullPointerException
ข้อยกเว้นนี้สำหรับผู้เริ่มต้นจะเข้าใจได้ง่ายกว่าสองข้อแรก นอกจากนี้ ข้อยกเว้นนี้สามารถระบุได้ง่ายเพราะว่า เมื่อเกิดขึ้น ข้อความเกี่ยวกับข้อยกเว้น จะระบุหมายเลขบรรทัดในโปรแกรมที่เกิดเหตุการณ์นั้น ข้อยกเว้นนี้เกิดขึ้นเมื่อ JVM พยายามเข้าถึงออบเจ็กต์หรือพยายามเรียกเมธอดบนออบเจ็กต์และได้รับค่า null แทนการอ้างอิงถึงออบเจ็กต์ Java Doc ยังระบุเหตุผลต่อไปนี้:
  • การเข้าถึงหรือการเปลี่ยนแปลงวิธีการบนวัตถุที่ไม่ถูกต้อง (เช่น แทนที่จะอ้างอิงถึงวัตถุ JVM จะได้รับค่าว่าง)
  • รับความยาวของอาร์เรย์เมื่อไม่ถูกต้อง (ไม่ได้เริ่มต้นเช่น)
  • มีความพยายามในการเข้าถึงองค์ประกอบอาร์เรย์ประเภท Object ที่ไม่มีอยู่จริง (เช่น เมื่อองค์ประกอบอาร์เรย์มีค่า null แทนที่จะเป็นการอ้างอิงวัตถุ)
วิธีที่ง่ายที่สุดในการหลีกเลี่ยงข้อยกเว้นนี้คือการใช้การตรวจสอบที่ไม่ใช่ NULL อย่างไรก็ตาม ไม่ช้าก็เร็ว สิ่งนี้จะกลายเป็นแนวปฏิบัติในการพัฒนา Java และคุณจะพบกับการตรวจสอบที่ไม่ใช่ NULL ทุกที่ ที่น่าสนใจคือการ ใส่การตรวจสอบที่ไม่ใช่ NULL ทุกที่ไม่ถือเป็นรูปแบบการเขียนโปรแกรมที่ดี และเหตุผลหลักในการใช้การตรวจสอบที่ไม่ใช่ NULL ก็คือนักพัฒนาต้องการส่งผ่านวัตถุ null ในกรณีที่เกิดความล้มเหลวหรือข้อผิดพลาด แต่เป็น แนวทางปฏิบัติในการเขียนโปรแกรมที่ดีที่โปรแกรมเมอร์ควรใช้ เพื่อส่งคืนอ็อบเจ็กต์ว่าง แทนที่จะเป็นค่า nullเนื่องจากเป็นตรรกะพื้นฐานสำหรับการทำงานของโปรแกรมในกรณีที่เกิดข้อผิดพลาด อย่างไรก็ตาม การนำแนวทางปฏิบัติด้านการเขียนโปรแกรมนี้มาใช้นั้นยากกว่าที่คิด
มี บทความ ที่ดี เกี่ยวกับเรื่องนี้ในแหล่งข้อมูลของเรา
4. ClassCastException
นี่เป็นข้อยกเว้นอีกประการหนึ่งที่ผู้เริ่มต้นคุ้นเคย ซึ่งเกิดขึ้นเมื่อพยายามส่งอ็อบเจ็กต์ไปยังคลาสที่ไม่ใช่คลาสย่อยของคลาสนั้น ขอย้ำอีกครั้งว่าสิ่งนี้ค่อนข้างง่ายต่อการเข้าใจ ระบุ และแก้ไขได้ง่าย วิธีหนึ่งในการหลีกเลี่ยงข้อยกเว้นนี้เมื่อไม่ทราบประเภทของวัตถุในขณะรันไทม์คือการใช้ "InstanceOf"เพื่อตรวจสอบว่าวัตถุนั้นเป็นอินสแตนซ์ของคลาสใดคลาสหนึ่ง
5. ArrayIndexOutOfBoundsException
ข้อยกเว้นนี้อธิบายได้ในตัวและเกิดขึ้นเมื่อ JVM พยายามเข้าถึงองค์ประกอบอาร์เรย์ที่มีดัชนีที่ไม่มีอยู่จริง เช่น ค่าลบ (-1) หรือมากกว่าหรือเท่ากับขนาดของอาร์เรย์ มันค่อนข้างง่ายที่จะเข้าใจ กำหนด และแก้ไข ตัวอย่างเช่น เมื่อสร้างลูป for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]); จะมีข้อยกเว้นเกิดขึ้น เนื่องจากในอาร์เรย์ ดัชนีเริ่มต้นจาก 0 และวิธีการความยาวจะส่งกลับจำนวนขององค์ประกอบ และตัวเลขนั้นมากกว่าค่าของดัชนีสุดท้าย 1 การใช้งานที่ถูกต้อง for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
6. ข้อยกเว้นข้อโต้แย้งที่ผิดกฎหมาย
ข้อยกเว้นนี้พบได้น้อยกว่าและค่อนข้างง่ายต่อการเข้าใจ ระบุ และแก้ไข มันเกิดขึ้นเมื่อ JVM พยายามเรียกเมธอดที่ไม่มีอยู่จริง หรือเมธอดที่มีอาร์กิวเมนต์ที่ไม่ถูกต้อง
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION