Перейти к основному содержимому

82 записи с тегом "Exception"

Посмотреть все теги

· 2 мин. чтения

1. Обзор

ArrayStoreException генерируется во время выполнения в Java , когда предпринимается попытка сохранить объект неправильного типа в массиве объектов . Поскольку ArrayStoreException является непроверенным исключением , его не принято обрабатывать или объявлять.

В этом руководстве мы продемонстрируем причину ArrayStoreException , способы ее обработки и рекомендации по ее предотвращению.

2. Причины ArrayStoreException

Java генерирует исключение ArrayStoreException , когда мы пытаемся сохранить объект другого типа в массиве вместо объявленного типа.

· 4 мин. чтения

1. Введение

Среди решений, которые мы принимаем при написании наших приложений, многие касаются того, когда генерировать исключения и какой тип генерировать.

В этом кратком руководстве мы рассмотрим вопрос о том, какое исключение генерировать, когда кто-то передает нулевой параметр одному из наших методов: IllegalArgumentException или NullPointerException .

Мы изучим тему, изучив аргументы обеих сторон.

2. Исключение нелегального аргумента

· 2 мин. чтения

1. Введение

В этом руководстве мы узнаем причину UnknownHostException на примере. Мы также обсудим возможные способы предотвращения и обработки исключения.

2. Когда возникает исключение?

UnknownHostException указывает, что IP-адрес имени хоста не может быть определен. Это может произойти из-за опечатки в имени хоста:

String hostname = "http://locaihost";
URL url = new URL(hostname);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.getResponseCode();

· 4 мин. чтения

1. Обзор

В этом руководстве мы продолжим нашу серию статей о Java 14 , взглянув на Helpful NullPointerException , новую функцию, представленную в этой версии JDK.

2. Традиционные исключения NullPointerException

На практике мы часто видим или пишем код, который связывает методы в Java. Но когда этот код выдает исключение NullPointerException , становится трудно понять, откуда возникает исключение.

Предположим, мы хотим узнать адрес электронной почты сотрудника:

· 3 мин. чтения

1. Обзор

На протяжении многих лет мы применяли множество стратегий, от операторов Элвиса до Optional , чтобы помочь удалить исключения NullPointerException из наших приложений. В этом руководстве мы узнаем о вкладе Uber в разговор, NullAway и о том, как его использовать.

NullAway — это инструмент сборки, который помогает нам устранять исключения NullPointerException (NPE) в нашем коде Java.

Этот инструмент выполняет ряд локальных проверок на основе типов, чтобы гарантировать, что любой указатель, который разыменовывается в вашем коде, не может быть нулевым . Он имеет низкие накладные расходы во время сборки и может быть настроен для запуска в каждой сборке вашего кода.

2. Установка

Давайте посмотрим, как установить NullAway и его зависимости. В этом примере мы собираемся настроить NullAway с помощью Gradle.

NullAway зависит от Error Prone . Поэтому мы добавим ошибочный плагин:

plugins {
id "net.ltgt.errorprone" version "1.1.1"
}

Мы также добавим четыре зависимости в разных областях: annotationProcessor , compileOnly , errorprone и errorproneJavac :

dependencies {
annotationProcessor "com.uber.nullaway:nullaway:0.7.9"
compileOnly "com.google.code.findbugs:jsr305:3.0.2"
errorprone "com.google.errorprone:error_prone_core:2.3.4"
errorproneJavac "com.google.errorprone:javac:9+181-r4173-1"
}

Наконец, мы добавим задачу Gradle, которая настраивает работу NullAway во время компиляции:

import net.ltgt.gradle.errorprone.CheckSeverity

tasks.withType(JavaCompile) {
options.errorprone {
check("NullAway", CheckSeverity.ERROR)
option("NullAway:AnnotatedPackages", "com.foreach")
}
}

Вышеупомянутая задача устанавливает серьезность NullAway на уровень ошибки, что означает, что мы можем настроить NullAway для остановки сборки с ошибкой. По умолчанию NullAway просто предупреждает пользователя во время компиляции.

Кроме того, задача задает проверку пакета на наличие нулевых разыменований.

Вот и все, теперь мы готовы использовать этот инструмент в нашем Java-коде.

Точно так же мы можем использовать другие системы сборки , Maven или Bazel , для интеграции инструмента.

3. Использование

Допустим, у нас есть класс Person , содержащий атрибут возраста . Кроме того, у нас есть метод getAge , который принимает экземпляр Person в качестве параметра:

Integer getAge(Person person) {
return person.getAge();
}

На данный момент мы видим, что getAge вызовет исключение NullPointerException , если person имеет значение null .

NullAway предполагает, что каждый параметр метода, возвращаемое значение и поле не являются нулевыми. Следовательно, он будет ожидать, что экземпляр person будет ненулевым .

И давайте также скажем, что в нашем коде есть место, которое действительно передает нулевую ссылку в getAge :

Integer yearsToRetirement() {
Person p = null;
// ... p never gets set correctly...
return 65 - getAge(p);
}

Затем запуск сборки приведет к следующей ошибке:

error: [NullAway] passing @Nullable parameter 'null' where @NonNull is required
getAge(p);

Мы можем исправить эту ошибку, добавив аннотацию @Nullable к нашему параметру:

Integer getAge(@Nullable Person person) { 
// ... same as earlier
}

Теперь, когда мы запустим сборку, мы увидим новую ошибку:

error: [NullAway] dereferenced expression person is @Nullable
return person.getAge();
^

Это говорит нам о том, что экземпляр person может быть нулевым . Мы можем исправить это, добавив стандартную нулевую проверку:

Integer getAge(@Nullable Person person) {
if (person != null) {
return person.getAge();
} else {
return 0;
}
}

4. Выводы

В этом руководстве мы рассмотрели, как можно использовать NullAway, чтобы ограничить вероятность возникновения исключений NullPointerException .

Как всегда весь исходный код доступен на GitHub .

· 2 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим причину ошибки TransactionRequiredException и способы ее устранения.

2. Исключение TransactionRequiredException

Эта ошибка обычно возникает, когда мы пытаемся выполнить операцию с базой данных, которая изменяет базу данных без транзакции .

Например, попытка обновить запись без транзакции:

· 3 мин. чтения

1. Проблема

В этой статье мы обсудим проблему org.hibernate.MappingException : Неизвестная сущность и решения как для Hibernate, так и для среды Spring и Hibernate.

2. Отсутствует или недействительна аннотация @Entity

Наиболее распространенной причиной исключения сопоставления является просто класс сущности, в котором отсутствует аннотация @Entity :

· 3 мин. чтения

1. Обзор

В этом руководстве мы рассмотрим проблему, которая может возникнуть при чтении файлов ресурсов в приложении Java: во время выполнения папка ресурсов редко находится в том же месте на диске, что и в нашем исходном коде.

Давайте посмотрим, как Java позволяет нам получить доступ к файлам ресурсов после того, как наш код был упакован.

2. Чтение файлов

Допустим, наше приложение читает файл при запуске:

· 3 мин. чтения

1. Обзор

Деление на ноль — это операция, которая не имеет смысла в обычной арифметике и, следовательно, не определена. Однако в программировании это часто связано с ошибкой, но это не всегда так .

В этой статье мы рассмотрим, что происходит, когда в Java-программе происходит деление на ноль.

В соответствии со спецификацией Java для операции деления мы можем идентифицировать два разных случая деления на ноль: целые числа и числа с плавающей запятой.

2. Целые числа

· 4 мин. чтения

1. Введение

Распространенной ошибкой при работе с файлами в Java является возможность исчерпания доступных файловых дескрипторов.

В этом уроке мы рассмотрим эту ситуацию и предложим два способа избежать этой проблемы.

2. Как JVM обрабатывает файлы

Хотя JVM прекрасно изолирует нас от операционной системы, она делегирует низкоуровневые операции, такие как управление файлами, операционной системе.