如何编写自己的自定义异常类。
我正在尝试编写自己的异常类,抛出InvalidTestScore。
// george beazer
import java.util.Scanner;
public class TestScores{
public static void main(String[]args){
int numTests = 0;
double[] grade = new double[numTests];
double totGrades = 0;
double average;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many tests do you have? ");
numTests = keyboard.nextInt();
grade = new double[(int) numTests];
for (int index = 0; index < grade.length; index++){
System.out.print("Enter grade for Test " + (index + 1) + ": ");
grade[index] = keyboard.nextDouble();
if (grade[index] < 0 || grade[index]> 100){
try {
throw new InvalidTestScore();
} catch (InvalidTestScore e)
{
e.printStackTrace();
}
}
}
for (int index = 0; index < grade.length; index++){
totGrades += grade[index];
}
average = totGrades/grade.length;
System.out.print("The average is: " + average);
}
}
答案 0 :(得分:2)
只需展开Exception
:
public class InvalidTestScoreException extends Exception {
public InvalidTestScoreException() {
super("Invalid test score");
}
public InvalidTestScoreException(String message) {
super(message);
}
public InvalidTestScoreException(Throwable throwable) {
super(throwable);
}
}
另一方面,检查异常最初非常有吸引力。但你应该避免不必要的使用。检查异常用于强制程序员处理异常条件(这使得代码更可靠,因为异常条件不能被忽略)。
此外,当条件可恢复时,将使用已检查的异常。这意味着当您使用已检查的异常时,可以合理地假设程序员可以从此异常中恢复。
使用运行时异常来指示编程错误。例如,如果违反了方法的前提条件,则可以使用IllegalArgumentException
。考虑到您的示例,此异常可能更有意义。
如果您可以使用适当的标准异常来代替已检查的异常,请执行此操作,而不是创建模仿现有功能(DRY)的新异常。
答案 1 :(得分:2)
class MyCustomException extends Exception
{
public MyCustomException(String message)
{
super(message);
}
}
答案 2 :(得分:1)
您只需扩展Exception
类。像这样:
class InvalidTestScore extends Exception {
}
此外,这里有一些我经常实现的有用的构造函数。
public InvalidTestScore(String msg) {
super(msg);
}
public InvalidTestScore(Throwable cause) {
super(cause);
}
以下是关于异常处理的官方跟踪:The Java Tutorials: Lesson: Exceptions