English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Как автоматически обрабатывать IllegalArgumentException в условиях if в Java?

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

Example

valueOf()Методы класса java.sql.Date принимают строку в формате JDBC escapeyyyy- [m] m- [d] dСтрока, представляющая дату, и ее преобразование в объект java.sql.Date.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Ввелите дату рождения в формате JDBC escape (yyyy-mm-dd)");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: " + date);
   }
}

Output result

Введите дату рождения в формате JDBC escape (yyyy-mm-dd)
1989-09-26
Дата, преобразованная в объект: 1989-09-26

Но если вы передадите строку date в любом другом формате, этот метод вызовет IllegalArgumentException.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Ввелите дату рождения в формате JDBC escape (yyyy-mm-dd)");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: " + date);
   }
}

Run-time exception

Введите дату рождения в формате JDBC escape (yyyy-mm-dd)
26-07-1989
Exception in thread "main" java.lang.IllegalArgumentException
   at java.sql.Date.valueOf(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:11)
В следующем примере Java конструктор Date (фактически устаревший) принимает

Example

setPriority()Методы класса Thread принимает целое значение, представляющее приоритет потока, и устанавливает его для текущего потока. Однако значение, передаваемое этому методу, должно быть меньше максимального приоритета потока, в противном случае этот метод выбрасываетIllegalArgumentException.

public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println(thread.MAX_PRIORITY);
      thread.setPriority(12);
   }
}

Run-time exception

10Exception in thread "main"
java.lang.IllegalArgumentException
   at java.lang.Thread.setPriority(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:6)

Обработка IllegalArgumentException в условиях if

При использовании методов, вызывающих IllegalArgumentException, поскольку вы знаете их законные параметры, вы можете заранее использовать if-условие для ограничения/проверки параметров и избежать исключений.

Example

import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println("Enter the thread priority value:");
      Scanner sc = new Scanner(System.in);
      int priority = sc.nextInt();
      if(priority<=Thread.MAX_PRIORITY) {
         thread.setPriority(priority);
      }
         System.out.println("Priority value should be less than: " + Thread.MAX_PRIORITY);
      }
   }
}

Output result

Enter the thread priority value:
15
Worth priority should be less than: 10
Основной учебник
Тебе может понравиться