异常

四、异常

异常:就是程序在运行时出现不正常情况。

1、异常体系

Throwable

|----Error 错误,一般情况下,不编写针对性的代码进行处理,通常是 jvm 发生的,需要对程序进行修正。

|----Exception 异常,可以有针对性的处理方式


问题分两种:一种严重问题、一种非严重问题

对严重的问题,java通过Error类进行描述

对于非严重的问题,java通过Exception类进行描述


Error和Exception区别:

error 属于编译时错误,根本不会编译通过,也就是不会生成.class 文件,exception 属于 运行时错误,只有在调用的时候才会报错,比如空指针或数组下标越界等等。

简单来说 error 想要恢复,比较困难,像内存溢出等。Exception 只要是你的程序设计没有 问题是不会出现的。


在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。通过 throws 关键字完成,格式:throws 异常类名,异常类名...

这样标示后,调用者,在使用该功能时,就必须要处理,否则编译失败。


throw 和 throws 关键字的区别:

throw 用于抛出异常对象,后面跟的是异常对象;throw 用在函数内。

throws 用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws 用在函 数上。

通常情况:函数内容如果有 throw,抛出异常对象,并没有进行处理,那么函数上一定要声 明,否则编译失败。但是也有特殊情况。


2、异常分类:(两种)

1):编译时被检查的异常,只要是 Exception 及其子类都是编译时被检测的异常。

2):运行时异常 ,其中 Exception 有一个特殊的子类 RuntimeException ,以及RuntimeException 的子类是运行异常,也就说这个异常是编译时不被检查的异常。


编译时被检查的异常和运行时异常的区别:自定义异常的步骤:

编译被检查的异常在函数内被抛出,函数必须要声明,否编译失败。 声明的原因:是需要调用者对该异常进行处理。

运行时异常如果在函数内被抛出,在函数上不需要声明。 不声明的原因:不需要调用者处理,运行时异常发生,已经无法再让程序继续运行,所以,不让调用处理的,直接让程序停止,由调用者对代码进行修正。


3、异常处理

原则:要么try,要么抛(throw)。功能抛出几个异常,功能调用时如果进行 try 处理,需要与之对应的 catch 处理代码块,这样的处理有针对性,抛几个就处理几个。

特殊情况:try 对应多个 catch 时,如果有父类的 catch 语句块,一定要放在下面。


定义异常处理时,什么时候定义 try,什么时候定义 throws 呢? 

功能内部如果出现异常,如果内部可以处理,就用 try; 如果功能内部处理不了,就必须声明出来,让调用者处理。



4、自定义异常

当开发时,项目中出现了 java 中没有定义过的问题时,这时就需要我们按照 java 异常建立思想,将项目的中的特有问题也进行对象的封装。这个异常,称为自定义异常。

例如:

对于除法运算,0 作为除数是不可以的。java 中对这种问题用 ArithmeticException类进行描述。对于这个功能,在我们项目中,除数除了不可以为 0 外,还不可以为负数。 可是负数的部分 java 并没有针对描述。所以我们就需要自定义这个异常。


自定义异常的步骤:

1:定义一个子类继承 Exception 或 RuntimeException,让该类具备可抛性。

2:通过 throw 或者 throws 进行操作。


当异常出现后,在子父类进行覆盖时,有了一些新的特点:

1:当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛 出异常要么抛出父类异常或者该异常的子类,不能抛出其他异常。

2:如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。


注意: 如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能 try 不能 throws。 如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过 throw 抛出 RuntimeException 异常或者其子类,这样,子类的方法上是不需要 throws 声明的。


5、常见异常

1、脚标越界异常(IndexOutOfBoundsException)包括数组、字符串; 空指针异常(NullPointerException)

2、类型转换异常:ClassCastException

3、没有这个元素异常:NullPointerException

4、不支持操作异常;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值