【问题标题】:Cannot find symbol, how do you write your custom exception class找不到符号,您如何编写自定义异常类
【发布时间】:2011-02-07 22:01:40
【问题描述】:

如何编写自己的自定义异常类。

我正在尝试编写自己的异常类,该类会引发 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);
        }

}

【问题讨论】:

  • 为什么行之间有这么大的空间?精简后更容易阅读(我对论文也是这么说的,但无论如何它们会让我们使用双倍行距)。

标签: java arrays class exception user-interface


【解决方案1】:

只需扩展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) 的新异常。

【讨论】:

  • public class InvalidTestScoreException extends Exception { public InvalidTestScoreException() { super("无效的考试成绩"); } public InvalidTestScoreException(String message) { super(message); } public InvalidTestScore(Throwable throwable) { super(throwable); } }
  • 我上次编辑有点太快了,我写了InvalidTestScore而不是InvalidTestScoreException。我已经修好了。
  • 当我将您的最新编辑添加到我的代码时它仍然不起作用?。
  • @user599272 你想做什么?
  • 你是用new InvalidTestScoreException() 扔它还是用new InvalidTestScore() 扔它?后者不起作用; Java 不知道它是什么类型,因为你还没有定义它。
【解决方案2】:
class MyCustomException extends Exception
{
    public MyCustomException(String message)
    {
        super(message);
    }
}

【讨论】:

    【解决方案3】:

    您只需扩展 Exception 类。像这样:

    class InvalidTestScore extends Exception {
    }
    

    另外,这里有一些我通常会实现的有用的构造函数。

        public InvalidTestScore(String msg) {
            super(msg);
        }
    
        public InvalidTestScore(Throwable cause) {
            super(cause);
        }
    

    这里是异常处理的官方线索:The Java Tutorials: Lesson: Exceptions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2021-12-23
      • 1970-01-01
      • 2017-04-30
      • 2018-01-02
      • 1970-01-01
      相关资源
      最近更新 更多