练习:计算成绩的平均值 ----- 异常的情况:成绩为负数
package Test_01;
/*
*练习:计算成绩的平均值
* 异常的情况:成绩为负数
*
*【Me】总结:练习写好一个程序,思路最重要要做到心中有数,
* 【当计算成绩的平均值,定义一个方法,最后这个方法返回平均数即可】
*
* 关键在于 方法的参数是啥?返回值类型是啥?—当然是一个数组(可变参数组int…grades)–int类型
* 方法定义好了,在主方法里边调用这个方法的时候同时要给这个方法传递参数(多个成绩),并接受它返回的值
* 这时候再看方法里边:
* 1.记录和int sum=0;
* 2.通过增强 for(int i : grades){ 循环遍历每个元素(值)累加
* sum=sum+i;
* i++;
* }
* 或者通过 for(int i=0;i<grades.length();i++){
* sum=sum+i;
* i++;
* }
* 3.返回平均数
* int avg = sum/grsades.length;
* ruturn avg;
*
* 【重点】当成绩出现负数是,应该抛出异常,这个异常sun公司–JDK里就没帮我们做好
* 因此,需要我们
* 自定义异常,FushuException需要继承继承Exception/RuntimeException
* 还需要俩个构造器,super();
* 此时就需要在方法里边判断异常:当i<0时,为负数,就抛出异常对象给调用者main方法,
* *
if(i<0){
//就将异常对象 抛出异常给调用者
throw new FushuException("成绩有误不能为负数:"+i); //这个异常调用了自定义异常的有参构造 器,super(message)返回给父类异常
}
**
* //当自定义异常继承RuntimeException无需在方法上声明异常
* 若继承Exception就需要声明异常
* //当异常对象抛给调用者main时就不要在throws声明异常
* 而是自己解决—try检测代码catch捕获异常:
*
**try{
* int pingjunshu = getAvg(66, 77, -88, 90);
System.out.println(pingjunshu);
* }catch(异常名 变量){
**
* 变量.去调用异常中常用的三个方法:
* 变量.getMessage();----String类型—返回此throwable的详细信息字符串
* 变量.toString();----String类型----我的理解这个返回的更详细
* 变量.printStackTrace();-----void类型—直接调用便在控制台打印出标准错误流
* }
*
*
*/
public class ExceptionDemo_01 {
// 定义方法:
// 参数? 【可变参】 数组
// 返回值? int类型---返回的是平均数
public static int getAvg(int... grades) {// 因为继承了RuntimeException,无需声明异常
// 统计和
int sum = 0;
for (int i : grades) {
//累加求和
sum += i;
i++;
// 判断异常
if (i < 0) {
throw new FushuException("成绩有误不能为负数:" + i);// 抛出异常对象 给 调用者main方法
}
}
int pingjunshu = sum / grades.length;
return (pingjunshu);
}
public static void main(String[] args) {
// 调用方法,传入参数,返回一个平均数
// 当main方法接收到异常对象不要再throws声明抛给JVM虚拟机,
// 而是自己解决--try检索代码catch捕获异常
try {
int pingjunshu = getAvg(66, 77, -88, 90);
System.out.println(pingjunshu);
} catch (FushuException fe) {
// 追踪输出至标准错误流
fe.printStackTrace();
System.out.println("");
}
}
自定义异常类:
/*
* 自定义异常类:
* 需要继承Exception、或者继承RuntimeException
* 格式:
* class 异常名 extends Exception/RuntimeException{
* //俩个构造器
* public 异常名 (){
* super();
* }
* public 异常名 (有参){
* super(s);
* }
* }
*/
public class FushuException extends RuntimeException{
//俩个构造器
public FushuException (){}
public FushuException (String message){
super(message);
}
}