У меня есть простое исключение, и я не знаю, как с этим бороться. У меня вопрос, что мне делать в основном?

Я знаю, что мне нужно создать Exception Class, но это простой пример, чтобы понять, как следует обрабатывать исключения в main.

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

public void addProfessor() throws Exception {
    if(professor) {
        throw new Exception(" prof already exists");
    }
    else {
        professor=true;
        System.out.println("\n--- addProfessor ---");
        System.out.println("Professor: " + professor);
        superState=SuperState.OPEN;
        System.out.println(superState);
        subState=SubState.ASSIGNED;
        System.out.println(subState);

    }
}


try {
    C.addProfessor();
    C.addProfessor();//here an exception should be displayed because I should have only one professor
} catch(Exception e) {
    e.printStackTrace();
}
finally {

}
-3
Pypp 14 Мар 2018 в 11:03

2 ответа

Лучший ответ

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

Если это просто пример, то:

Во-первых: (как упоминалось в одном из комментариев) лучше создать собственное исключение (просто унаследовать, например, от RuntimeException, если вы хотите снять флажок или из Exception для отмеченного) - тогда вы не поймаете случайно какое-то другое неожиданное исключение.

Во-вторых: когда вы перехватываете исключение, у вас есть выбор, что делать:

  1. сделать некоторую очистку и перебросить
  2. просто зарегистрируй это
  3. вы также можете повторить попытку, если это имеет смысл (в вашем примере это не так, потому что повторная попытка просто вызовет другое исключение - если только профессор не был удален другим потоком)

Когда вы перехватываете exceptin вместо e.printStackTrace();, вы можете получить сообщение от исключения или даже (поскольку вы создали собственное значимое исключение) вы уже знаете основную причину и можете просто отобразить ее пользователю.

Просто иллюстрация:

catch(ProfessorAlreadyExistsException e) {
    System.out.println("Professor already exists");
}
1
Maciej 14 Мар 2018 в 09:26

Чтобы создать собственный Exception, вам нужно создать класс, расширяющий Exception. Например, как показано ниже:

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

Затем вам нужно использовать этот ProfessorException в своем коде:

  public void addProfessor() throws ProfessorException {
      if(professor) {
         throw new ProfessorException(" prof already exists");
      }
      ...
   }

   ...




try {
    C.addProfessor();
    C.addProfessor();//here an exception should be displayed because I should have only one professor
} catch (ProfessorException e) {
    e.printStackTrace();
} finally {  // Note that finally block is not needed here because it does nothing

}

Если вы хотите вывести сообщение на стандартный вывод вместо печати трассировки стека, вы можете сделать это:

try {
   C.addProfessor();
   C.addProfessor();//here an exception should be displayed because I should have only one professor
} catch (ProfessorException e) {
   System.out.println(e.getMessage());
}
0
Davide Lorenzo MARINO 14 Мар 2018 в 08:18