JAVA的异常处理机制知识

一.什么是异常?

就是不正常,是指程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。


出现的问题有很多种,比如下标越界,空指针等都是。就对这些问题进行分类。而且这些问题都有共性内容比如:每一个问题都 

名称,同时还有问题描述的信息,问题出现的位置,所以可以不断的向上抽取。形成了异常体系。


二.异常的体系Throwable

一般分为两大体系

Error:通常指JVM出现重大问题如:运行的类不存在或者内存溢出等。
    不需要编写针对代码对其处理,程序无法处理。 

Exception :在运行时运行出现的一些情况,可以通过try,catch,finally处理。


三.异常的分类

1.编译期异常:编译时被检查异常; ---> Checked异常
在程序中必须使用try...catch处理;

2.运行期异常:编译时不被检测的异常; ---> Runtime异常
可以不使用try...catch处理,但一旦出现异常就将由JVM处理。


四.异常处理两种方式

1.声明异常(throws):

概念:

在可能出现异常的方法上声明抛出可能出现异常的类型:
声明的时候尽可能声明具体的异常,方便更好的处理.
当前方法不知道如何处理这种异常,可将该异常交给上一级调用者来处理(非RuntimeException类型的异常)。
方法一旦使用throws声明抛出方法内可能出现的异常类型, 该方法就可以不再过问该异常了;
一个方法调用另一个使用throws声明抛出的方法,自己要么try...catch , 要么也throws;


格式:
public 返回值类型  方法名(参数列表...) throws 异常类A,异常类B... {

}

throw:

自行抛出一个异常对象;使用在方法内部


语法:throw   new  异常类 ();  


1、若throw抛出的是Runtime异常:
程序可以显示使用try...catch来捕获并处理,也可以不管,直接交给方法调用者处理;


2、若throw抛出Checked异常:
要么放在try里自己处理,要么放在一个throws声明的方法里面,交给调用者处理。

throws与throw的区别:

throws:用在方法上,声明该方法不需要处理的异常类型,后面跟异常类名, 可以是多个异常类。


throw:用在方法内,用于抛出具体异常类的对象,后面跟异常对象,只能是一个。


throw和catch同时使用的情况:

当异常出现在当前方法中,程序只对异常进行部分处理,还有一些处理需要在方法的调用者中才能

处理完成,时还应该再次抛出异常,这样就可以让方法的调用者也能捕获到异常;


2.捕获异常:


单个异常捕获:

try{
//可能出异常的代码
} catch(异常类  对象){
//处理该异常类型的语句
}
[finally] {
//一定会执行的代码
//catch块使用System.exit(1);除外
}

finally知识:

异常的统一出口:
a) 不管try块程序是否异常,也不管哪个catch执行,finally块总会执行。
b) try语句块或会执行的catch语句块使用了JVM系统退出语句例外;//System.exit(1);
c) try块必须和 catch块或和finally同在,不能单独存在,二者必须出现一个。
d) 不要在finally中使用return 或throw语句,否则将会导致try、catch中的return或throw失效。


注意:finally代码块只在一种情况下不执行:System.exit(0);



小结:

当try语句块出现异常,程序会自动跳到catch语句块去找匹配的异常类型,并执行异常处理语句,

finally语句块是异常的统一出口。


多个异常捕获:

语法结构:


try{
//可能出异常的代码
} catch(异常类  对象){
//处理该异常类型的语句
} catch(异常类  对象){
//处理该异常类型的语句
} catch(异常类  对象){
//处理该异常类型的语句
}
[finally] {
//一定会执行的代码
//catch块使用System.exit(1);除外
}

小结:在java处理多异常时捕获小范围的异常必须放在大范围异常之前。

自定义异常:

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


实现步骤:1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性。
   2:通过throw 或者throws进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值