java异常处理机制及异常处理的基本结构


一、什么是异常?

1.java异常简介

在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环境,例如用户的坏数据、试图打开一个不存在的文件等。为了能够及时有效地处理程序中的运行错误,Java 专门引入了异常类

2.异常实例(演示异常)

允许用户输入 1~3 以内的整数,其他情况提示输入错误

import java.util.Scanner;
public class Test01 {
    public static void main(String[] args) {
        System.out.println("请输入您的选择:(1~3 之间的整数)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        switch (num) {
        case 1:
            System.out.println("one");
            break;
        case 2:
            System.out.println("two");
            break;
        case 3:
            System.out.println("three");
            break;
        default:
            System.out.println("error");
            break;
        }
    }
}

如果用户没有按要求进行输入,例如输入了一个字母“a”,则程序在运行时将会发生异常,运行结果如下所示:

请输入您的选择:(1~3 之间的整数)
a
Exception in thread "main" java.util.InputMismatchException
        at java.util.Scanner.throwFor(Unknown Source)
        at java.util.Scanner.next(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at java.util.Scanner.nextInt(Unknown Source)
        at text.text.main(text.java:11)

二、异常产生的原因及使用原则

1.异常产生的主要原因

  • Java 内部错误发生异常,Java 虚拟机产生的异常

  • 编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常

  • 通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息

Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常

2.对于可能产生的异常,遵循以下原则

  • 在当前方法声明中使用 try catch 语句捕获异常

  • 一个方法被覆盖时,覆盖它的方法必须拋出相同的异常或异常的子类

  • 如果父类抛出多个异常,则覆盖方法必须拋出那些异常的一个子集,而不能拋出新异常

三、异常处理

1.处理异常的关键字

Java 的异常处理通过 5 个关键字来实现:try、catch、throw、throws 和 finally

  • try catch 语句用于捕获并处理异常
  • finally 语句用于在任何情况下(除特殊情况外)都必须执行的代码
  • throw 语句用于拋出异常
  • throws 语句用于声明可能会出现的异常

2.处理异常的机制

  1. 在方法中用 try catch 语句捕获并处理异常,catch 语句可以有多个,用来匹配多个异常
  2. 对于处理不了的异常或者要转型的异常,在方法的声明处通过 throws 语句拋出异常,即由上层的调用方法来处理
try {
    逻辑程序块
} catch(ExceptionType1 e) {
    处理代码块1
} catch (ExceptionType2 e) {
    处理代码块2
    throw(e);    // 再抛出这个"异常"
} finally {
    释放资源代码块
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值