在Java中进行异常处理时从未抛出异常

时间:2019-02-26 07:26:00

标签: java exception try-catch

我对Java编程还很陌生,我正在尝试学习Java的特殊处理方法。在以下代码中,我得到了一个错误:

  

未报告的异常InvalidTestScore;必须被抓住或宣布被抛出        抛出新的InvalidTestScore(“ Invalid Test Score”);

我试图弄清楚这个问题,但是我不能,因为它说必须捕获或声明它,所以我给了catch块,除了抛出的异常参数之外。

import java.io.*;
import java.util.*;

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

public class TestClass {

  public static void inTestScore(int[] arr) {
    int sum = 0, flag = 0;
    for (int i = 0; i < arr.length; i++) {
      if (arr[i] < 0 || arr[i] > 100) {
        flag = 1;
        break;
      } else {
        sum += arr[i];
      }
    }

    if (flag == 1) {
      throw new InvalidTestScore("Invalid Test Score");
    } else {
      System.out.println(sum / arr.length);
    }
  }

  public static void main(String[] args) {
    int n;
    Scanner input = new Scanner(System.in);
    n = input.nextInt();
    int[] arr = new int[n];
    for (int i = 0; i < n; i++) {
      arr[i] = input.nextInt();
    }

    try {
      inTestScore(arr);
    } catch (InvalidTestScore e) {
      System.out.println(e);
    }
  }
}

2 个答案:

答案 0 :(得分:4)

你在做

throw new InvalidTestScore("Invalid Test Score"); 

所以您必须声明您的方法实际上将引发此异常

public static void inTestScore(int[] arr) throws InvalidTestScore

答案 1 :(得分:1)

您必须声明您的方法可能会引发此异常:

public static void inTestScore(int[] arr) throws InvalidTestScore {
    ...
}

这允许编译器强制调用您方法的任何方法捕获此异常,或声明它可能引发该异常。