我有一个简单的例外,我不知道如何处理它。我的问题是我应该在主要做什么?
我知道我应该创建一个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 {
}
答案 0 :(得分:1)
首先,您的示例看起来像您尝试使用的异常在标准商务流程中抛出。 保留异常以处理真正异常的情况,而不是在程序流中使用它是一种很好的做法。
如果只是一个例子那么:
首先:(如其中一条评论中所述)更好地创建自己的异常(例如,如果您想要取消选中,则仅从RuntimeException派生 或来自已检查的异常) - 然后你不会偶然发现其他意外的异常。
第二:当您发现异常时,您可以选择该做什么:
当您捕获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());
}