Java自定义异常类的问题,新手求解。

自定义一个异常FailException,表示不及格。
创建类Student,有两个属性表示平时成绩和期末成绩,一个方法计算总成绩,用平时成绩加上期末成绩的0.5倍来计算总成绩,如果总成绩小于60分,则抛出异常FailException.
创建测试类,实例化Student对象,调用getScore方法来计算总成绩,注意异常的捕获。
代码如下:
class Student {
private double regularGrade;
private double finalGrade;

public Student(double regularGrade, double finalGrade) {
    this.regularGrade = regularGrade;
    this.finalGrade = finalGrade;
}

public double getScore() throws FailException {

    if (getScore() < 60) {
        throw new FailException("你的成绩不及格!");
    }
    return regularGrade + finalGrade * 0.5;
}

}

class FailException extends Exception {
public FailException() {
super();
}

public FailException(String message) {
    message = "你的成绩不及格!";
}

public String getMessage() {
    return "未通过!" + super.getMessage();
}

}

public class Test {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Student s1 = new Student(50, 60);
    try {
        s1.getScore();
    } catch (FailException e) {
        System.out.print(e.toString());
    }

}

}
请大家看一下我的代码有什么问题?我的意思是考试成绩低于60分,就抛出异常不及格,但是构造方法应该怎么写呢?我想用一个包含message和cause的方法,cause应该怎么写?

5个回答

首先getScore方法里面又调用了自己,调用getScore这不死循环了?

 public double getScore() throws FailException {

    if (getScore() < 60) {
        throw new FailException("你的成绩不及格!");
    }
    return regularGrade + finalGrade * 0.5;
}

另外不清楚背景,请考虑这种成绩不合格的结果确实是一种异常情况?就是说有这种成绩不合格就需要暂停当前逻辑执行?答案如果是肯定那么OK,否则只是通过捕获该异常来引导到另外一个一条业务逻辑分支,那么不建议用异常。
最后,一定自定义异常的话,建议继承RuntimeException类,而不是Exception。

lpirate4
lpirate4 我想自定义一个抛出异常的原因,应该怎么做呢?
4 年多之前 回复
class FailException extends Exception {
    public FailException() {

    }
    public FailException(String message) {
            super(message);
    }
}

havedream_one
havedream_one 回复lpirate4: 我记得我看了一句话是自定义异常主要为了设置这个message,其他的不用改,
4 年多之前 回复
lpirate4
lpirate4 这里有问题吗?
4 年多之前 回复

super可以吧。。exception有的

public FailException(String message) {
message = "你的成绩不及格!";
}
这里的message是参数 你在throw new FailException("你的成绩不及格!");这里已经给它赋值了

public String getMessage() {
return "未通过!" + super.getMessage();
}
这里为啥要调用父类的getMessage方法 不该是子类的吗
不知道你出现什么错误
可以探讨下

修改FailException类和getScore()方法:

1、FailException类

class FailException extends Exception {

        String msg;

        public FailException() {
                super();
        }

        public FailException(String message) {
                msg = message;
        }

        public String getMessage() {
                return msg + super.getMessage();
        }
}

2、getScore()方法

public double getScore() throws FailException {
        double score = 4.0;
        if (score < 60) {
                throw new FailException("你的成绩不及格!");
        } else {
                return score;
        }
}
wanghang1208
wanghang1208 double score = 4.0; 改为double score = regularGrade + finalGrade * 0.5;
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问