1.异常是什么?
程序中可能出现的问题
2.异常体系的最上层父类是谁?异常分为几类?
父类:Exception。
异常分为两类:编译时异常、运行时异常
3.编译时异常和运行时异常的区别?
编译时异常:没有继承RuntimeExcpetion的异常,直接继承于Excpetion。
编译阶段就会错误提示
运行时异常:RuntimeException本身和子类。
编译阶段没有错误提示,运行时出现的
运行时异常和编译时异常的区别?
●编译时异常:除了RuntimeExcpetion和他的子类,其他都是编译时异常。
编译阶段需要进行处理,作用在于提醒程序员。
●运行时异常:RuntimeException本身和所有子类,都是运行时异常。
编译阶段不报错,是程序运行时出现的。
异常的作用
作用一:异常是用来查询bug的关键参考信息
作用二:异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况
抛出异常throw
在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接受参数。那么,当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的方式来告诉调用者。
在java中,提供了一个throw关键字,它用来抛出一个指定的异常对象。那么,抛出一个异常具体如何操作呢?
-
创建一个异常对象。封装一些提示信息(信息可以自己编写)。
-
需要将这个异常对象告知给调用者。怎么告知呢?怎么将这个异常对象传递到调用者处呢?通过关键字throw就可以完成。throw 异常对象。
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
使用格式:
throw new 异常类名(参数);
灵魂四问
灵魂一问:如果try中没有遇到问题,怎么执行?
答:
会把try里面所有的代码全部执行完毕,不会执行catch里面的代码
灵魂二问:如果try中可能会遇到多个问题,怎么执行?
答:
会写多个catch与之对应,父类异常需要写在下面
灵魂三问:如果try中遇到的问题没有被捕获,怎么执行?
答:
相当于try...catch白写了,当前异常会交给虚拟机处理
灵魂四问:如果try中遇到了问题,那么try下面的其他代码还会执行吗?
答:
不会执行了。try中遇到问题,直接跳转到对应的catch
如果没有对应的catch与之匹配,则交给虚拟机处理
常用方法:
public String getMessage()
:获取异常的描述信息,原因(提示给用户的时候,就提示错误原因。
public String toString()
:获取异常的类型和异常描述信息(不用)。
public void printStackTrace()
:打印异常的跟踪栈信息并输出到控制台。细节:仅仅打印信息,不会停止虚拟机
1.虚拟机默认处理异常的方式
把异常信息以红色字体打印在控制台,并结束程序
2.捕获:try...catch
不让程序停止
一般用在调用处,能让代码继续往下运行。
3.抛出:throw throws
告诉调用者出错了
在方法中,出现异常了。
方法就没有继续运行下去的意义了,采取抛出处理。让该方法结束运行并告诉调用者出现了问题。