java中的自定义异常

时间:2018-03-14 08:03:14

标签: java exception

我有一个简单的例外,我不知道如何处理它。我的问题是我应该在主要做什么?

我知道我应该创建一个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 {

}

2 个答案:

答案 0 :(得分:1)

首先,您的示例看起来像您尝试使用的异常在标准商务流程中抛出。 保留异常以处理真正异常的情况,而不是在程序流中使用它是一种很好的做法。

如果只是一个例子那么:

首先:(如其中一条评论中所述)更好地创建自己的异常(例如,如果您想要取消选中,则仅从RuntimeException派生 或来自已检查的异常) - 然后你不会偶然发现其他意外的异常。

第二:当您发现异常时,您可以选择该做什么:

  1. 做一些清理&重新抛出
  2. 只记录
  3. 如果有意义,你也可以重新尝试(在你的例子中它没有,因为重新尝试只会抛出另一个异常 - 除非另一个线程删除了profesor)
  4. 当您捕获exceptin而不是e.printStackTrace();时,您可以从异常中获取消息,或者甚至(当您创建自己的有意义的异常时),您已经知道根本原因并且可以将其显示给用户。 / p>

    只是一个ilustration:

    catch(ProfessorAlreadyExistsException e) {
        System.out.println("Professor already exists");
    }
    

答案 1 :(得分:0)

要创建自定义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());
}