异常:指程序出现了不正常的情况
程序的异常分类:Throwable
严重问题:Error
问题:Exception
编译时异常:不是RuntimeException的异常,必须处理,不处理编译就不能通过
运行时异常:RuntimeException,不处理,原因是代码不够严谨,需要修改代码
异常的处理:
如果程序出现了问题,我们没有做出处理,最终jvm会做出默认的处理,把异常的名称,原因及出现的问题输出到控制台。
我们自己处理:1、try...catch...finally 2、throws
1、try...catch...finally
try{ //可能出现问题的代码 }catch(Exception e){ //针对异常的处理 }catch(Exception e){ //针对异常的处理 }finally{ //释放资源 }
如出现既有子类异常类,又有父类异常类,父类异常必须放在最后一个catch当中。一旦try里面的代码出现问题,jvm就会生成一个异常对象,然后将对象抛出,与catch里面的异常进行匹配。
异常中的几个方法:
String getMessage() :异常的消息字符串
String toString():异常的简单信息描述
void printStackTrace():获取异常类名和异常信息,以及异常出现的位置,把信息输出到控制台。
2、throws
有些时候我们没有权限去处理异常,或者处理不了,就不处理了,由调用者自行处理。这时可以用throws将异常抛出,throws必须写在方法的括号后面。
格式:throws 异常类名1, 异常类名2
public void method()throws Exception{ //执行代码 }
调用该方法时,必须对异常进行处理,可以用try...catch处理。
3、throws和throw的区别
throws:
- 用在方法声明后面,跟的是异常类名
- 可以跟多个类名,用逗号隔开
- 表示抛出异常,有该方法的调用者来处理
- throws表示一种异常的可能性,并不一定出现异常
throw:
- 用在方法体内,跟的是异常对象
- 只能跟一个异常对象
- 表示抛出异常,有方法体内的语句进行处理
- throw表示抛出异常,执行throw表示一定抛出了某种异常
4、异常处理的原则:
如果该功能内可以对问题进行处理,就用try,如果处理不了就用throws,交由调用者处理
区别:后面程序需要继续运行就用try
后面程序不需要继续运行就用throws
5、finally
被finally控制的语句一定会执行,但是特殊情况下:如果在finally执行之前,jvm退出了,将不能执行
作用:用于释放资源
6、自定义异常类
自定义异常类必须继承Exception类或者RuntimeException类,通常还会有两个构造函数
public class MyException extends Exception { public MyException(){} public MyException(String message){ super(message); } }
7、异常注意事项
子类重写父类方法时,子类必须抛出相同的异常或父类异常的子异常
如果父类抛出多个异常,子类重写父类是,只能抛出相同异常或是他的子集,不能抛出父类没有的异常
如果父类没有抛出异常,子类方法绝不能抛出异常,若子类有异常需要处理,只能用try,不能用throws