异常
·异常是程序中可能出现的问题
·异常体系的最上层父类是Exception
·异常分为两类:编译时异常、运行时异常
·编译时异常和运行时异常的差别:
·编译时异常:没有继承RuntimeException的异常,直接继承于Exception,在编译阶段就要进行处理的异常。(例如日期解析异常)
·运行时异常:RuntimeException本身和子类,编译阶段不需要处理,代码运行时出现异常(例如数组越界异常)
异常的作用
1、异常是用来查询Bug的关键参考信息
2、异常可以作为方法内部的特殊返回值,以便通知调用者底层的执行情况
异常的处理方式
1、JVM默认的处理方式
//异常的名称,异常原因以及异常位置等信息输出到控制台
//程序停止运行,下面的代码不会再执行了
2、自己处理
格式:
try{
可能出现异常的代码//此处出现了异常,程序就会在这里创建一个对象,拿着这个对象与catch括号中的对象对比,看是否能接收这个对象,如果能被接收,表示该异常被捕获,执行catch中的代码,然后继续执行try...体系外的代码。
}catch(异常类名 变量名){
异常的处理代码
}finally{//表示一定会执行的代码
}
好处:可以让程序继续往下执行,不会停止。
1、如果try中没有异常,会把catch中的代码全部执行完毕,不会执行catch中的代码。,只有出现异常才会执行catch中的代码;
2、如果try中可能出现多个异常,要写多个catch与之对应。这些异常中如果存在父子关系,那么父类一定要写在下面。
了解性:在JDK7以后,我们可以在catch中捕获多个异常,中间用|隔开,表示A异常或者B异常发生,采取同一种方案。
3、如果try中的问题没有被捕获,那么相当于try...catch白写了,最终还是会交给虚拟机处理
4、如果try中遇到了问题,那么try下面的代码就不会执行了,会直接跳转到对应的catch中,执行catch中的语句。
常用方法:
public String getMassage()//返回throwable的详细消息字符串
public String toString()//返回可抛出的简短描述
public void printStackTrace()//把异常的错误信息输出在控制台,不会停止程序运行,只是打印异常信息,使用:System.err.println()打印红色字体的错误信息。
3、抛出异常
throws
注意:写在方法定义处,表示声明一个异常,告诉调用者,使用本方法可能会有哪些异常。
public void 方法() throws 异常名1,异常名2,异常名3...{
}//编译时异常必须要写,运行时异常可以不写
throw
注意:写在方法内,结束方法,手动抛出异常对象,交给调用者,方法下面的代码不再执行。
public void 方法(){
throw new NullpointerException();
}
4、自定义异常
意义:就是为了让控制台的报错信息更加的见名知意
1、定义异常类//以Exception结尾,表示是一个异常类
2、写继承关系//如果时运行时异常继承RuntimeException 核心:由于参数问题导致的
//编译时异常继承Exception。核心:提醒程序员检查本地信息
3、空参构造
4、带参构造
ption 核心:由于参数问题导致的
//编译时异常继承Exception。核心:提醒程序员检查本地信息
3、空参构造
4、带参构造