异常的学习

异常分为编译时期异常与运行时期异常

编译时期异常运行前必须处理,否则代码报错

除了RuntimeException和他的子类,其他都是编译时异常

运行时期异常运行时报错,一般是由参数传递错误导致的报错

异常的作用:

1.异常使用来查询bug的关键参考信息

2.异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况

异常的处理方法

1.虚拟机默认的处理方式

把异常的名称,原因,出现位置输出在控制台,并停止进程

2.自己处理(捕获异常)

格式:

try{

        可能出现的异常的代码;

} catch(异常类名 变量名){

        异常的处理代码;

}

目的:代码出现异常时,可以继续运行

int[] arr = {1, 2, 3, 4, 5};

try {
    //可能出现异常的代码
    System.out.println(arr[10]);//此处出现了异常。就会在这里创建一个                                ArrayIndexOutOfBoundsException对象
                                //new ArrayIndexOutOfBoundsException()
                                //拿着这个对象到catch里面的小括号里比,哭哭小括号中的变量是否可以接收
                                //如果能接收,就表示该异常被捕获,执行catch里的代码
                                //执行完毕后继续执行try catch体系下面的代码
} catch (ArrayIndexOutOfBoundsException e) {
    //如果出现了异常该如何处理
    System.out.println("索引越界了");
}
System.out.println("?????????");

如果try中可能会遇见多个问题,怎么执行?

碰到第一个异常就会跳转到catch,不会运行try接下来的语句

如果会有多个异常,就应该有多个catch接受

如果这些异常存在父子关系的话,父类一定要写在下面

3.交给调用者

异常类常用的方法

Throwable的成员方法


            //获取异常信息
/*            String message = e.getMessage();
            System.out.println(message);*/


/*            //打印异常
            String s = e.toString();
            System.out.println(s);*/

            //打印异常,仅仅是打印信息,不会停止程序运行
            e.printStackTrace();

抛出处理

throws

注意:写在方法定义出,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常

public void 方法() throws 异常1,异常2.。。{

}

编译时异常:必须要写

运行时异常:可以不写

 public static void main(String[] args) {

        /*
         * throws
         * */
        int[] arr = {};
        try {
            System.out.println(getMax(arr));
        } catch (NullPointerException e) {
            System.out.println("空指针");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("索引越界");
        }
        System.out.println("????");
    }

    public static int getMax(int[] arr) throws NullPointerException, ArrayIndexOutOfBoundsException {
        if (arr == null) {
            //手动创建一个异常对象,并把这个异常交给调用者处理
            throw new NullPointerException();
        }
        if (arr.length == 0) {
            throw new ArrayIndexOutOfBoundsException();
        }
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }
}

throw

注意:写在方法内,结束方法,手动抛出异常对象,交给调用者,方法中下面的代码不再执行了

public void 方法(){

        throw new 异常();

}

自定义异常

1.定义异常类

2.写继承关系

3.写空参构造

4.带参构造

public class NameFormatException extends RuntimeException{
    //技巧
    //NameFormat当前异常名字
    //Exception表示当前是个异常类

    //运行时异常RuntimeEcxeption 核心 参数错误导致的问题
    //编译时异常Exception 核心 提醒程序员检查本地信息


    public NameFormatException() {
    }

    public NameFormatException(String message) {
        super(message);
    }
}
public void setName(String name) {
    int len = name.length();
    if (len < 3 || len > 10) {
        throw new NameFormatException(name+" 格式有误!");
    }
    this.name = name;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值