异常------自定义异常

练习:计算成绩的平均值 ----- 异常的情况:成绩为负数

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);
	 }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41573718/article/details/88780867