-
NoClassDefFoundError
: นี่เป็นหนึ่งในข้อยกเว้นที่Exception in thread “main“ NoClassDefFoundError
มักจะยินดีต้อนรับนักพัฒนาใหม่เข้าสู่โลกของการเขียนโปรแกรม Java พวกเขาเขียนโปรแกรม helloworld ไปที่บรรทัดคำสั่งแล้วเขียน " java " - คำสั่งให้ดำเนินการและ "BAM" :-) หลังจากนั้นไม่นานผู้เริ่มต้นจะเข้าใจวิธีแก้ไขข้อยกเว้นนี้และดูว่าสวัสดีโลกพิมพ์อย่างไรNoClassDefFoundError
เกิดขึ้นเมื่อ Java Virtual Machine (JVM) พยายามเข้าถึงคลาสขณะรันไทม์และไม่พบคลาสแม้ว่าจะมีคลาสเดียวกันในเวลาคอมไพล์ก็ตามclasspath
บ่อยครั้งที่ข้อยกเว้น นี้เกิดขึ้นเมื่อรันโปรแกรม Java ผ่านคำสั่ง "java" ที่มีค่าพารามิเตอร์ที่ไม่ถูกต้อง [Classpath
เป็นพารามิเตอร์ที่ตั้งค่าผ่านบรรทัดคำสั่งหรือผ่านตัวแปรสภาพแวดล้อม ซึ่งระบุถึงเครื่องเสมือน Java หรือคอมไพเลอร์ Java ที่จะค้นหาคลาสหรือแพ็คเกจที่ผู้ใช้ประกาศ - ประมาณ นักแปล] เหตุผลที่เป็นไปได้สำหรับการยกเว้น:- ชั้นเรียนไม่มีอยู่ใน
Classpath
. classpath
บ่อยครั้งที่สคริปต์ที่ถูกดำเนินการเมื่อระบบปฏิบัติการเริ่มทำงาน จะเปลี่ยนค่าของตัวแปรสภาพแวดล้อม คุณสามารถตรวจสอบได้โดยการรันset
คำสั่ง “ ” บนบรรทัดคำสั่งของ Windows และดูว่าคำจำกัดความของคลาสรวมอยู่ในค่าหรือclasspath
ไม่ หากคุณต้องการ คุณสามารถสำรวจข้อยกเว้นนี้เพิ่มเติมได้ในบล็อกJavarevisited
- ชั้นเรียนไม่มีอยู่ใน
-
ClassNotFoundException
: ИсключениеClassNotFoundException
это еще одно исключение, из-за которого новичкам, только начинающим программировать на Java, снятся кошмары. Интересно что для среднего разработчика нужно некоторое время чтобы перестать путатьClassNotFoundException
иNoClassDefFoundError
между собой. И поэтому вопрос о разнице этих двух исключений остается одним из часто задаваемых на собеседовании на позицию junior Java разработчика.ClassNotFoundException
случается когда JVM пытается загрузить определенный класс и не обнаруживает такого же вclasspath
. Обычно новички сталкиваются с этим в codeе, который подключается к базе данных используя JDBC библиотеку. Пытаясь загрузить драйвер с помощью следующего codeаClass.forName( “JDBCdriver”)
. Хороший материал поClassNotFoundException
можно найти здесь. Так же рекомендуется ознакомиться и понять концепцию загрузчиков классов в Java чтобы эффективно справляться с этим исключением. Вы возможно захотите посмотреть следующую page о том How настроить classpath в окружениях Win/Unix. А так, How следует из documentации Java, это исключение случается в следующих случаях:- Когда пытаются загрузить класс используя метод
Class.forName
и файл.class
не существует вclasspath
. Это самый частый случай из всех трех. - Когда загрузчик класса пытается загрузить класс используя метод
loadClass
. - Когда загрузчик класса пытается загрузить класс используя
findSystemClass
.
- Когда пытаются загрузить класс используя метод
-
NullPointerException
: исключениеNullPointerException
понять легче и новички с ним справляются быстрее нежели с двумя предыдущими. В тоже время причину исключения очень легко найти так How приводится номер строки где оно случилось. В первую очередь исключение случается когда JVM пытается обратиться к null в том месте где должен был быть an object. Чаще всего это случается когда JVM пытается вызвать метод используя an object и оказывается что an object equalsnull
. Другие случаи, How упоминается в documentации Java, могут быть следующими:- Получая доступ к or изменяя метод an object, который equals
null
. - Получая длину массива когда он equals
null
. - Получая доступ к or меняя an objectы, которые являются заключенными в массив, который equals
null
.
null
(далее – проверка на null – прим. переводчика). Поэтому рано or поздно разработчик начинает это использовать и тогда проверки на null появляются везде. Интересно что использовать везде проверку наnull
не считается примером хорошего программирования. Основная причина почему проверка наnull
используется разработчиками это передавать an objectnull
в случаи ошибки. В место этого пример хорошего программирования, который должен пропагандироваться программистами, это передавать пустой an object когда condition для главной/рабочей ветви программы не удовлетворяется. Это в свою очередь уменьшило бы количество проверок наnull
. Все-таки легче говорить нежели применять это на практике.:) - Получая доступ к or изменяя метод an object, который equals
ClassCastException
: это еще одно из исключений, с которым знакомятся новички когда пытаются привести an object к классу, экземпляром которого он не является. Опять же его довольно легко понять, найти причину и исправить. Один из способов избежать этого исключения, когда во время исполнения тип an object не известен, это использовать проверку является ли an object экземпляром определенного класса: “instanceof
”.ArrayIndexOutOfBoundsException
: название этого исключения говорит само за себя. Оно случается когда JVM пытается получить доступ к элементу массива используя неверный индекс, на пример, отрицательный (-1) or больший or равный размеру массива. Его легко понять, найти причину и исправить. Следующий пример codeа поможет избежать этого исключения:for( index = 0; index < array.length; index++ )
Обратите внимание что индекс начинается с 0 и возрастает до величины на 1 меньше размера массива.-
IllegalArgumentException
: Это исключение самое простое, его легко понять, найти его причину и исправить. Оно случается когда JVM пытается передать методу неподходящий аргумент or аргумент неправильного типа.
gram2005
ระดับ
6 ข้อยกเว้น Java ที่สร้างภัยพิบัติให้กับมือใหม่
ในบางครั้ง ฉันได้พบกับนักพัฒนาหน้าใหม่ที่ติดอยู่กับการทำความเข้าใจข้อยกเว้นง่ายๆ ต่อไปนี้ และฉันต้องอธิบายทุกอย่างให้พวกเขาฟังอีกครั้ง เป็นไปได้มากว่านักพัฒนา Java ที่มีประสบการณ์จำนวนมากพบว่าตัวเองตกอยู่ในสถานการณ์ที่คล้ายกันและช่วยให้มือใหม่รับมือกับข้อยกเว้นต่อไปนี้ ดังนั้นฉันจึงตัดสินใจเขียนบทความนี้และอ้างอิงถึงบทความนี้ในอนาคต ยินดีรับฟังความคิดเห็นและข้อมูลเพิ่มเติมในรายการยกเว้น
GO TO FULL VERSION