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

Как программист может вручную выбрасывать исключения в Java?

Исключением являются проблемы, возникающие в процессе выполнения программы (время выполнения ошибки). При возникновении исключения программа внезапно завершается, и код после строки, вызывавшей исключение, никогда не будет выполнен.

Пример

import java.util.Scanner;
public class ExceptionExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter first number: ");
      int a = sc.nextInt();
      System.out.println("Введите второе число:");
      int b = sc.nextInt();
      int c = a / b;
      System.out.println("Результат: " + c);
   }
}

Результат выполнения

Введите первое число:
100
Введите второе число:
0
Exception in thread "main" java.lang.ArithmeticException: / by zero
at ExceptionExample.main(ExceptionExample.java:10)

вручную выбрасывать исключения

Вы можете использоватьthrow Ключевое слово явно вызывает пользовательские или предопределенные исключения.

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

Чтобы явно выбросить исключение, вам нужно создать его класс и использовать ключевой слово throw для выброса его объекта.

Пример

Ниже приведен пример Java-программы, вызывающей NullPointerException

public class ExceptionExample {
   public static void main(String[] args) {
      System.out.println("Привет");
      NullPointerException nullPointer = new NullPointerException();
      throw nullPointer;
   }
}

Результат выполнения

Привет
Exception in thread "main" java.lang.NullPointerException
   at MyPackage.ExceptionExample.main(ExceptionExample.java:6)

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

Пример

public class ExceptionExample {
   public static void main(String[] args) {
      System.out.println("Привет");
      NullPointerException nullPointer = new NullPointerException();
      throw nullPointer;
      System.out.println("Как вы");
   }
}

Ошибка компиляции

D:\>javac ExceptionExample.java
ExceptionExample.java:6: ошибка: недоступное выражение
   System.out.println("Как вы");
   ^
1 error

Пользовательские исключения

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

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

Пример

В следующем примере Java программы мы создадим пользовательский класс исключения AgeDoesnotMatchException.

public class AgeDoesnotMatchException extends Exception {
   AgeDoesnotMatchException(String msg) {
      super(msg);
   }
}

Другой класс Student содержит две私有ные переменные name и параметризованный конструктор, который инициализирует экземпляр.

В качестве основного метода мы принимаем имя пользователя и значение возраста, и инициализируем класс Student переданными значениями.

В конструкторе класса Student мы создали исключениеAgeDoesnotMatchExceptionобъект, и вызвал исключение (используя throws) при условии, что значение возраста находится в диапазоне от 17 до 24.

public class Student extends RuntimeException {
   private String name;
   private int age;
   public Student(String name, int age) {
      try {
         if (age < 17 || age > 24) {
            String msg = "Возраст не介于 17 и 24";
            AgeDoesnotMatchException ex = new AgeDoesnotMatchException(msg);
            throw ex;
         }
      }
         e.printStackTrace();
      }
      this.name = name;
      this.age = age;
   }
   public void display() {
      System.out.println("Имя студента: " + this.name);
      System.out.println("Возраст студента: " + this.age);
   }
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Введите имя студента: ");
      String name = sc.next();
      System.out.println("Введите возраст студента, который должен быть между 17 и 24 (включая 17 и 24): ");
      int age = sc.nextInt();
      Student obj = new Student(name, age);
      obj.display();
   }
}

Результат выполнения

Во время выполнения этой программы вам нужно передать значения имени и возраста с клавиатуры. Если заданный возраст не находится между 17 и 24, происходит исключение, как показано ниже:

Введите имя студента:
Krishna
Введите возраст студента, который должен быть между 17 и 24 (включая 17 и 24):
14
AgeDoesnotMatchException: Возраст не介于 17 и 24
Имя студента: Krishna'
Возраст студента: 14
   at Student.<init>(Student.java:18)
   at Student.main(Student.java:39)
Основной учебник
Давай посмотрим, что тебе может понравиться