异常
来源:互联网 发布:经典算法详解 编辑:程序博客网 时间:2024/05/16 12:10
异常就是程序中存在的问题
在java中程序出问题有两种情况下
Exception------->解决
Error----------->不能解决
Throwable这是Exception与Error的父类
Throwable
|-----Exception
|-----Error
命名规范
所有异常都是使用Exception做为后缀
所有的错误都是使用Error做为后缀.
对一些情况我们可以使用if条件语句进行判断解决存在的隐患,为什么还要使用异常
1.我们使用异常,可以将我们程序中的逻辑代码与异常问题分离。 而使用if判断操作,是将逻辑代码与判断操作混到一起,它会使用程序不清晰。
2.当我们完成某个操作时,这个操作是否执行成功了,我们需要根据执行成功与进行其它操作,但是这个方法它不能进行返回操作,那么这个时候就可以使用异常进行处理。
Exception的处理方式 1.捕获 2.抛出
捕获
格式
try{
可能出现异常的代码块
}catch(异常类型变量){
对异常进行处理.
}finally{
完成关闭动作(关闭资源)
}
如果出现异常,那么异常后面的代码不会被执行。
关于异常中常用的方法.
getMessage() 获取异常信息,返回字符串。
toString() 获取异常类名和异常信息,返回字符串。
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
异常处理抛出
throws异常类型1,异常类型2,...
写在方法上.
抛出是抛给了调用者,如果调用者也没有处理,继续抛出,那么最终就会抛出给jvm。
什么时候使用捕获,什么时候使用抛出?
如果当前问题在方法内可以自己解决,那么我们就进行捕获。
如果解决不了,那么抛出给调用者,让调用者解决。
异常分为两种
1.编译异常:当我们对java文件进行编译时,就要求我们对产生的异常进行处理,这种异常就是编译异常。
Exception类以及除了RuntimeException体系中的其它类都是编译异常
2.运行异常: 我们可以不用对其进行处理,如果出现问题,jvm会处理.
RuntimeException以及其子类都是运行异常
无论是编译异常还是运行异常,我们都可以人为的对其进行处理。
自定义异常
简单说就是自己做一个类去继承异常类。这就是自定义异常。
为什么要使用自定义异常?
在实际操作中,有些问题,不能使用jdk中提供的异常进行描述,这个时候我们就可以自已定义异常来对其进行描述。
我们在使用自定义异常时会使用一个关键字 throw, throw作用是抛出异常对象。
throw与 throws区别
1.throw用在方法内,throws用在方法的声明上2.throw后面跟的是异常对象 throws后面跟的是异常类型。 3.throw后面只能跟一个对象 throws后面可以跟多个异常类型
try...catch一个try可以对应多个catch
finally在其中完成关闭动作
因为无论是否产生异常,finally最后都会被执行。
try{
}[catch(){
}]finally{
}
在上面的代码中catch 可以没有。
try{
}catch(XxxExceptione){
}catch(XxxExceptione){
}catch(Exceptione){
}
多个catch时,要注意捕获的类型.应该是从小到大。
异常涉及到的关键字
try 产生异常的代码块
catch 处理异常的代码块
finally 关闭动作
throws抛出异常类型
throw 抛出异常对象。
异常的细节
方法重写时关于异常的问 1.父类抛出异常 子类可以不抛出。2.父类抛出异常 子类也可以抛出与父类中相同的异常3.父灰抛出异常 子类也可以抛出父类抛出异常的子类型
如果父类抛出多个异常,子类也遵循上面的原则.
问题:如果父类中方法没有定义异常,子类重写的方法中产生了异常,那么子类中是否可以抛出异常?
不可以,父类中的方法没有抛出异常,子类中重写的方法不能抛出。 只能在重写的方法内try...catch。
方法中如果在finally前执行了return,finally是否会被执行。
会被执行。
有一种情况下不会被执行 System.exit(0);