0
点赞
收藏
分享

微信扫一扫

理解java中的异常

爱动漫建模 2022-01-21 阅读 53

理解java中的异常


异常:异常指的就是程序在 运行时 出现错误时通知调用者的一种机制.不包含编译过程的异常
常见的主要有三种:除以 0、数组下标越界、访问 null 对象

1、常见异常

  1. 除 0 异常
    在这里插入图片描述
  2. 空指针异常
    通过null调用成员方法或属性在这里插入图片描述
  3. 数组下标越界异常
    在这里插入图片描述

2、避免异常的两种处理(防御式编程)

2.1 LBYL:在操作之前就做充分的检查.

LBYL 风格的代码(不使用异常)

boolean ret = false;
ret = 登陆游戏();
if (!ret) {
 处理登陆游戏错误;
    return; 
    }
ret = 开始匹配();
if (!ret) {
 处理匹配错误;
    return; 
    }
ret = 游戏确认();
if (!ret) {
 处理游戏确认错误;
    return; 
    }
ret = 选择英雄();
if (!ret) {
    处理选择英雄错误;
    return; }
ret = 载入游戏画面();
if (!ret) {
 处理载入游戏错误;
    return; }
......

2.2 EAFP:先操作, 遇到问题再处理.

try {
    登陆游戏();
    开始匹配();
    游戏确认();
    选择英雄();
    载入游戏画面();
   ...
} catch (登陆游戏异常) {
    处理登陆游戏异常;
} catch (开始匹配异常) {
 处理开始匹配异常;
} catch (游戏确认异常) {
 处理游戏确认异常;
} catch (选择英雄异常) {
 处理选择英雄异常;
} catch (载入游戏画面异常) {
 处理载入游戏画面异常; }
......

3、异常的基本语法

3.1 捕获异常

基本语法:

  1. 数组越界异常
    在这里插入图片描述

  2. 空指针异常
    此时有多个catch可不捕获多种异常在这里插入图片描述

  3. 假设此时可能出现10种异常,若写10种很麻烦,可用向上转型,使用异常的共同父类Exception来捕获异常,不太推荐,一般明确知道会产生那种异常就捕获那种异常,方便排查问题
    在这里插入图片描述
    关于异常的错误输出
    在java中,一切皆对象,上面的空指针、数组越界、Exception ——> 都是异常 类 当产生错误时,JVM会构造一个相应的异常对象传递给程序

catch(ArrayIndexOutOfBoundsException e)中的e就是异常对象,由JVM产生传递给catch代码段

e.printStackTrace();打印错误的堆栈信息 错误开始的位置

 int[] arr={10,20,30};
        // 将可能报错的代码放在try中,并用catch捕获
        try{
            System.out.println(arr[10]);
        }
        catch(ArrayIndexOutOfBoundsException e){
            System.out.println("数组下标越界");
             e.printStackTrace();
        }

3.2 异常的返回值问题

一旦finally中带了返回值,相当于try和catch中的返回值就失效了,无论异常发生与否,finally一定执行,因此会覆盖try和catch的返回值。
在finally中一般不推荐写返回值,除非返回值与异常无关,默认返回值可放在finally中
在这里插入图片描述

3.3 关于异常的调用链

异常会随着调用链向上传递,直到有一处捕获异常并处理为止。若调用过程都没有异常,最终会将异常抛给JVM,此时程序终止。
在这里插入图片描述

3.4一组关键字:throws throw

throws:用在方法声明上明确表示该方法有可能产生异常,但不处理,抛回给调用者处理
PAI

throw:用在方法内部,表示认为产生异常对象并抛出
在学习数据结构写栈等结构时,若栈为空,调用取出栈元素方法就可以使用throw手工抛出异常,告诉调用者栈为空,无法操作。
在这里插入图片描述

举报

相关推荐

0 条评论