-
NoClassDefFoundError
Exception in thread “main“ NoClassDefFoundError
: これは、新しい開発者を Java プログラミングの世界に歓迎することが多い例外の 1 つです。彼らは helloworld プログラムを作成し、コマンド ラインに移動して、実行するコマンドである「java」と「BAM」を書き込みます :-) しばらくすると、初心者はこの例外を修正する方法を理解し、hello world がどのように出力されるかを確認できるようになります。NoClassDefFoundError
この問題は、Java 仮想マシン (JVM) が実行時にクラスにアクセスしようとし、コンパイル時に同じクラスが存在していたにもかかわらず、そのクラスが見つからなかった場合に発生します。ほとんどの場合、この例外は、無効なパラメータ値を指定して「java」コマンドを使用して Java プログラムを実行するときに発生しますclasspath
。[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
レベル 30
初心者を悩ませる 6 つの Java 例外
時々、次のような単純な例外を理解するのに苦労している新しい開発者に遭遇することがあります。そのため、私は彼らにすべてをもう一度説明しなければなりません。おそらく、多くの経験豊富な Java 開発者が同様の状況に陥っており、初心者が次の例外に対処できるよう支援しています。そこで、この記事を書いて今後の参考にさせていただくことにしました。コメントや除外リストへの追加は大歓迎です。
GO TO FULL VERSION