Java进阶——异常处理和捕捉

异常:是指程序在运行过程中出现的非正常情况异常处理:异常处理是一种技术,用于处理这种异常情况//出现异常后 程序立刻结束//一旦出现异常,程序立刻结束,“end”内容将不会输出如果企业自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。**需求:写一个saveAge(int age)方法,在方法中对参数age进行判断,如果age<0或者>=150就认为年龄不合法,如果年龄不合法,就给调用者抛出一个年龄非法异常。
摘要由CSDN通过智能技术生成

目录

一、什么是异常?

1.认识异常

2.Java异常体系结构

二、异常处理

1.异常处理

(1)⽤try、catch、finally来捕获和处理异常。

(2)使用try-catch-finally处理异常

(3)使用多重catch处理异常

2.捕获异常(抛出异常)

(1)使⽤throws来抛出异常。

(2)使用throw抛出异常

3.throw 和 throws 的区别

三、自定义异常

1.定义自定义类的步骤

2.自定义异常

四、异常链


一、什么是异常?

1.认识异常

异常:是指程序在运行过程中出现的非正常情况

异常处理:异常处理是一种技术,用于处理这种异常情况

public class Main {
    
    public static void main(String[] args) {
        
        //出现异常后 程序立刻结束
        int i = 1,j = 0,res;
        
        System.out.println("begin");
        
        res = i / j;
        
        System.out.println("end");
        
  }
    //一旦出现异常,程序立刻结束,“end”内容将不会输出
2.Java异常体系结构

所有异常类都是Throwable类的子类,它派生出两个子类, Error 类和 Exception 类。

(1) Error 类:表示程序无法恢复的严重错误或者恢复起来比较麻烦的错误,例如内存溢出、动态链接失败、虚拟机错误等。应用程序不应该主动抛出这种

类型的错误,通常由虚拟机自动抛出。如果出现这种错误,最好的处理方式是让程序安全退出。在进行程序设计时,我们更应关注Exception类。

(2) Exception 类:由Java应用程序抛出和处理的非严重错误,例如文件未找到、网络连接问题、算术错误 (如除以零)、数组越界、加载不存在的类、对

空对象进行操作、类型转换异常等。Exception类的不同子类对应不同类型的异常。

Exception类又可分为两大类异常:

不受检异常:也称为unchecked异常,包括RuntimeException及其所有子类。对这类异常并不要求强制进行处理,例如算术异常ArithmeticException

等。本章将重点讲解不受检异常。 (运行时异常)

受检异常:也称为checked异常,指除了不受检异常外,其他继承自Exception类的异常。对这类异常要求在代码 中进行显式处理。 (编译时异常)

Java提供了多种异常类,下表列举了一些常见的异常类及其用途。在当前阶段,你只需要初步了解这些异常类即可。在以后的编程中,可以根据系统报告的异

常信息,分析异常类型来判断程序出现了什么问题。

二、异常处理

1.异常处理

Java的异常处理机制类似于人们对可能发生的意外情况进行预先处理的方式。在程序执行过程中,如果发生了异常,程序会按照预定的处理方式对异

常进行处理。处理完异常之后,程序会继续执行。如果异常没有被处理,程序将终止运行。

Java的异常处理机制依靠以下5个关键字:try、catch、finally、throw、throws。这些关键字提供了两种异常处理方式。

(1)⽤try、catch、finally来捕获和处理异常。

try块中包含可能会抛出异常的代码。

catch块⽤于捕获并处理指定类型的异常。

finally块中的代码⽆论是否发⽣异常都会被执⾏,通常⽤于释放资源或清理操作。

public class Main {
    public static void main(String[] args) {
        try{
        //出现异常后 程序立刻结束(try块语句结束)
        int i = 1,j = 0,res;
        System.out.println("begin");
        res = i / j;
        System.out.println("end");
        }catch (Exception e){//catch所处理的异常类型与try语句块中的异常类型相同或是父类
            System.out.println("caught");
            e.printStackTrace();//void.printStackTrace()输出异常的堆栈信息
        }
        System.out.println("over");
    }
}

image-20230830203722185

  • 如果try块中的语句执行完,没有发生异常,那么catch 语句块中的所有语句都将被忽略。

  • 如果try语句块在执行过程中发生异常,并且这个异常与catch 语句块中声明的异常类型匹配,那么try语句块剩下的代码都将被忽略,,而相应的catch语

    句块中的内容会被执行,catch所处理的异常类型与try语句块中的异常类型相同或是父类。-

  • try语句块在执行过程中发生异常,而抛出的异常在CATCH语句块中没有被声明,那么程序立即终止运行,程序被迫退出。

    例如:

    image-20230830205347423

  • catch语句块中可以加⼊⽤⼾⾃定义处理信息,也可以调⽤异常对象的⽅法输出异常信息,常⽤的⽅法如下:

    void prinStackTrace() :输出异常的堆栈信息。

    String getMessage() &#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值