首页 > 其他 > 详细

异常处理

时间:2021-06-13 19:12:02      阅读:20      评论:0      收藏:0      [点我收藏+]

异常处理

p.378

抓抛模型

过程一:”抛“,在程序正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应的异常类的对象,并将此对象抛出。一旦抛出对象以后,其他代码就不再执行。

过程二:“抓”,可以理解为异常的处理方式 ①try-catch-finally ②throws

try-catch-finally的使用

try{

? //可能出现异常的代码

}catch(异常类型1 变量名1){

? //处理异常的方式1

}catch(异常类型2 变量名2){

? //处理异常的方式2

}catch(异常类型3 变量名3){

? //处理异常的方式3

}

......

finally{

? //一定会执行的代码

}

说明

  1. finally是可选 的。
  2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配。
  3. 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理,一旦处理完成,就跳出当前的try-catch结构(在没有写finally的情况下),继续执行其后的代码。
  4. catch中的异常类型如果满足子父类关系 ,则要求子类一定声明在父类的上面,否则报错。
  5. 常用的异常对象处理的方式:①String getMessage () ②printStackTrace()
  6. 在try结构中声明的变量,在出了try结构以后,就不能再被调用。
  7. finally中声明的是一定会被执行的代码。即使catch中又出现了异常,try中有return,catch中有return语句等情况。

体会:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally。针对编译时异常,我们说一定要考虑异常的处理。

throws 异常的使用(自动创建)

  1. "throws+异常类型"写在方法的声明处,指明此方法执行时,可能会抛出的异常类型。出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出.异常代码后续的代码,就不会执行!

  2. 体会:try-catch-finally:真正的将异常给处理掉

    ? throws:只是将异常抛给了方法的调用者,并没有将异常处理掉.

  3. 开发中如何选择使用try-catch-finally 还是使用throws?

    1. 如果父类中被重写的方法没有throws方式处理的异常,则子类中处理的方法也不能有throws.意味着子类如果重写的方法有异常,必须使用try-catch-finally方式处理.

    2. 执行的方法a中,先后调用了另外几个方法,这几个方法是递进关系执行的.我们建议这几个方式用throws的方式处理.而执行的方法a中可以考虑使用try-catch-throws的方式处理。

throw手动抛出异常

throw new runtimeExpection("你输入的数据非法!")

如何自定义异常

  1. 继承于现有的异常结构:RuntimeException、Exception

  2. 提供全局常量:serialVersionUID

  3. 提供重载的构造器

技术分享图片

例题

求2个数相除;要求:除数和被除数均不能为负数;除数不能为0.

  1. 自定义Ecdef异常
package com.yicurtain.Exception;

public class Ecdef extends Exception{
    static final long serialVersionUID = -338751699312422948L;
    public  Ecdef(){

    }
    public  Ecdef(String msg){
        super(msg);
    }
}

  1. 主函数求解

    package com.yicurtain.Exception;
    
    import java.util.Scanner;
    
    public class EcmDef {
        public static void main(String[] args)  {
           try {
               Scanner scanner = new Scanner(System.in);
               System.out.println("请输入被除数与除数:");
               while (scanner.hasNextInt()) {
                   int i = scanner.nextInt();
                   int j = scanner.nextInt();
                   int result = ecm(i, j);
                   System.out.println("结果为:"+result);
    
               }
           }catch(Ecdef e){
               e.printStackTrace();
           }catch(ArithmeticException e){
               e.printStackTrace();
           }
    
    
    
            }
        public static  int ecm(int i,int j) throws Ecdef{
    
            if (i<0||j<0){
                throw new Ecdef("输入的数不能为负数!");
            }
            return i/j;
    
        }
    
    }
    
    

异常处理

原文:https://www.cnblogs.com/yicurtain/p/14880787.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!