2022-07-29 第五组 张明敏 学习笔记

本文详细介绍了Java中的异常处理机制,包括异常的继承结构、自定义异常、手动抛出异常以及捕获异常的方法。重点讲解了如何处理常见的编程异常如空指针、数组越界和算术异常,并展示了如何通过try-catch-finally结构来优雅地处理异常。同时,讨论了return在异常处理中的作用以及多重catch块的应用。最后,作者分享了在实际编程中被空指针异常困扰的心得体会。
摘要由CSDN通过智能技术生成

目录

一、异常处理

1. 编程界

2. 异常的继承结构体系:

3. 自定义异常:

4. 怎么自定义异常?

手动抛出异常

return返回值的使用:

二、捕获异常

1.捕获异常的方法

2.处理异常代码的方法

3.return返回值的使用:

4.多重catch块:


一、异常处理

1.下标越界

2.空指针

3.类型转换异常

4.数字格式化

5.算数异常(数字异常)

1. 编程界

1.除数为0

2.输入输出流 -》IO流,没有关闭

3.停电

当一个程序抛出异常时,抛异常后的语句不再执行,类似于return的功能,终止方法执行。

 public static void main(String[] args) {
        int num1=10;
        int num2=0;
        try {
            System.out.println(num1 / num2);
        }catch (Exception e){//捕获异常
            System.out.println("除数不能为零");
            e.printStackTrace();//输出异常信息
        }
        System.out.println("我很重要...");

    }

结果:

java.lang.ArithmeticException: / by zero
    at hh.ch01.main(ch01.java:21)
除数不能为零
我很重要...

2. 异常的继承结构体系:

  • 最顶级的Throuwable:错误,异常
  • Error:正常情况下,不太可能出现的。绝大多数Error都会导致程序处于非正常的状态下,很难恢复。外力的作用下,不考虑。

            Error是Throuwable的子类。在程序处理范围之外的。

  • Exception:Java语言中,将程序执行中发生的不正常的情况称之为异常。

           编译期异常:IOException   写代码时,抛异常。不解决,一直报红。

           运行期异常:RuntimeException  运行会抛异常,平时没事。

RuntimeException的子类有:

  • ArithmeticException            算术异常
  • NullPointerException           空值异常
  • ArrayIndexOutOfBoundsException 数组越界异常
  • InputMismatchException         非法输入异常
  • IllegalArgumentException       非法传参异常
  • NumberFormatException          数字转换异常
  • ClassCastException             类转换异常
  • ClassNotFoundExcption          类加载异常

3. 自定义异常:

Java中异常机制,但结合实际业务。

4. 怎么自定义异常?

声明抛出throw

声明异常:将问题标识出来,报告给调用者,如果方法内通过throw抛出了编译异常,而没有捕获处理,那么必须通过throws进行声明,让调用者负责处理。

关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常) 。

声明格式:

修饰符 返回值类型  方法名(参数) throws 异常类名1,异常类名2...{}

异常①:

异常②:

手动抛出异常

Java异常类对象在除了程序执行过程当中出现异常外,也可以根据需要手动创建并抛出异常。

①首先要生成异常类的对象,然后通过throw语句实现抛出异常

IOException io = new IOException();
throw io;

②可以抛出的异常必须是Throwable或者其子类的实例

throw new IOException("出现异常");

案例:定义一个键盘输入的方法创建一个异常,如果输入的是数字那么打印出这个数字,如果没有输入就会报异常信息。​​

public static void main(String[] args){
    MsgException();
  }
  public static void MsgException() {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入任意一个数字:");
    String num = sc.nextLine();
    if(num.equals("")) {
      throw new NullPointerException("您没有输入!");
    }else {
      System.out.println("您输入的数字是:"+num);
    }
  }

结果信息:

return返回值的使用:

可用在try、catch、finaly中,

当try中有return返回值时,则catch或finaly中必须有返回值,否则编译异常,

因为执行try中代码遇到异常时,会直接跳到catch块中,不经过try中return返回值。

二、捕获异常

1.捕获异常的方法

try {

    //需要捕获异常的代码

} catch (Exceptione) {

    //处理异常代码的方法

}finally{

    //不论有无异常,都会执行的代码,除非catch中有System.exit()方法

}

2.处理异常代码的方法

  1. printStackTrace();堆栈跟踪。显示执行流程,返回异常描述字符串、异常类型、异常位置
  2. System.exit(1);   异常终止
  3. System.exit(0);   程序终止

3.return返回值的使用:

  1. 可用在try、catch、finaly中,
  2. 当try中有return返回值时,则catch或finaly中必须有返回值,否则编译异常,
  3. 因为执行try中代码遇到异常时,会直接跳到catch块中,不经过try中return返回值。

4.多重catch块:

根据try中捕获的异常类型,选择对应的catch块处理,通常前面catch块会先声明子类异常,最后catch块用父异常Exception收尾。

示例:

try {

    //出现有异常类型2的代码

} catch (异常类型1 e) {

    e.printStackTrace();   

} catch (异常类型2 e) {

    e.printStackTrace();

}

三、心得体会

被空指针折磨死了,累累累!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值