异常处理机制

1.异常的概述

异常就是程序出现了不正常的情况
异常的体系结构:在 Java 中所有异常类型都是内置类 java.lang.Throwable 类的子类,即 Throwable 位于异常类层次结构的顶层。Throwable 类下有两个异常分支 Exception 和 Error,Exception 类用于用户程序可能出现的异常情况,它也是用来创建自定义异常类型类的类。Error 类型的异常通常是灾难性的致命错误,不是程序可以控制的。如图 1 所示。
在这里插入图片描述
其中异常类 Exception 又分为运行时异常和编译时异常,除运行时异常其他都被称为非运行时异常,也称为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

Exception 类型的异常包括(及其区别):

  • 运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
  • 编译时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常(一般情况下不自定义检查异常)。

2.异常的处理方式

  • try-catch
  • throws
    (1)try-catch

try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常处理代码;
}

catch里的语句执行完后,程序还可以继续往下执行

public class Throwable {
    public static void main(String[] args) {
        System.out.println("开始");
        method();
        System.out.println("结束");
    }
    public static void method(){
       try{
           int[] arr = {1,2,3};
           System.out.println(arr[3]); //ArrayIndexOutOfBoundsException
       }catch (ArrayIndexOutOfBoundsException e){
        //   System.out.println("您输入的索引不存在");
         e.printStackTrace();
          // System.out.println(e.getMessage());
           //System.out.println(e.toString());
       }
    }
}
 try {//try监控区域
            System.out.println(a/b);
       }catch (Error e) {// catch(想要捕获的异常类型)   捕获异常                                    System.out.println("Error");
       }finally {//一般是处理善后工作
           System.out.println("finally");
      }

(2)throws

public void 方法() throws 异常类名{
}

public void checkScore(int score) throws ScoreException {
        if(score < 0 || score >100){
            throw new ScoreException("你给的分数有误,分数应该在0-100之间");
        }else{
            System.out.println("分数正常");
        }
    }

throw和throws的区别:

  • throw:用在方法体内,跟的是异常对象名;由方法体内的语句处理;执行了throw一定抛出了某种异常
  • throws:用在方法声明后面,跟的是异常类名;由该方法的调用者来处理;表示出现异常的一种可能性,并不一定会发生这些异常

3.自定义异常

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需要继承Exception类即可。
大体可分为以下几个步骤:

  1. 创建自定义异常类。
  2. 在方法中通过throw关键字抛出异常对象。
  3. 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
  4. 在出现异常方法的调用者中捕获并处理异常。
public class Teacher {
    public void checkScore(int score) throws ScoreException {
        if(score < 0 || score >100){
            throw new ScoreException("你给的分数有误,分数应该在0-100之间");
        }else{
            System.out.println("分数正常");
        }
    }
}
import java.util.Scanner;

public class ScoreDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");
        int s = sc.nextInt();
       Teacher t = new Teacher();
        try {
            t.checkScore(s);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值