(7)异常

Throwable的子类包含哪两类?简述Java Error类与Exception类的区别。

Throwable的子类包含Error和Exception两类。区别:Error异常是系统异常(都是非检查异常),主要包括虚拟机错误(virtualmachineError)、线程死锁(threaddeth)。一旦出现Error异常就代表着程序崩溃了,可将其看作程序的终结者。Exception异常包括两个大类:非检查异常(RuntimeException)和检查异常。RuntimeException异常主要包括四种异常:空指针异常,数组下标越界异常、类型转换异常、算术异常。由java虚拟机自动抛出和自动捕获。检查异常:主要是一些文件异常,日志异常,sql异常,和一些需要我们人为干预的异常。检查异常,需要手动添加异常的捕获和处理。

Exception又分为checked异常和unchecked异常,请分别举例说明。

checked异常:主要是一些文件异常,日志异常,sql异常,和一些需要我们人为干预的异常。检查异常,需要手动添加异常的捕获和处理。unchecked异常主要包括四种异常:空指针异常,数组下标越界异常、类型转换异常、算术异常。由java虚拟机自动抛出和自动捕获。

请查阅资料,简述StackOverflowError和OutOfMemoryError两类错误的发生情形和原因。

StackOverflowError发生情形和原因:发生的地方:虚拟机栈和本地方法栈;发生的原因:线程调用生成的栈桢深度超过了虚拟机允许的深度(比如一个方法A内调用了方法B,然后B又调用C...这样调用了1万层,就像你要去地狱十八层,但是虚拟机只提供了到九层的梯子),不过现在大多数虚拟机栈的调动深度都是可以动态扩展的,所以这个问题出现的概率非常的低。

OutOfMemoryError发生情形和原因:发生的地方:基本上虚拟机的运行时数据区域(堆,栈,方法区)都会发生;发生的原因:内存不够,发生了内存溢出。

简述异常处理的两种方式,并举例说明区别。

第一种:使用try和catch关键字捕获异常,被try块包围的代码说明这段代码可能会发生异常,一旦发生异常,异常便会被catch捕获到,然后需要在catch块中进行异常处理。

第二种:抛出异常,顾名思义,也就是说一旦发生异常,把这个异常抛出去,让调用者去进行处理,自己不进行具体的处理,此时需要用到throw和throws关键字。

区别:嵌套处理通过try-catch-finally来解决当出现异常时程序会自己进行处理;声明抛出异常是程序可以不对异常进行处理,让调用该方法的地方处理。

选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。(例如算术异常,空指针异常,类转换异常,数组越界异常等)

根据某业务场景自定义一个异常类,并在某场景下抛出该异常对象。

异常中的throws声明与throw语句的区别是什么?请举例说明。

throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用就抛给谁。(用在方法声明后面,跟的是异常类名;可以跟多个异常类名,用逗号隔开;表示抛出异常,由该方法的调用者来处理;throws表示出现异常的一种可能性,并不一定会发生这些异常)
throw:则是用来抛出一个具体的异常类型。(用在方法体内,跟的是异常对象名;只能抛出一个异常对象名;表示抛出异常,由方法体内的语句处理;throw则是抛出了异常,执行throw则一定抛出了某种异常)

finally子句的作用是什么?

try{}

catch(Exception e){}

finally{}

finally里一般拿来做一些善后清理工作,try块里出现错误的话,会立即跳出try块,找到匹配的错误,执行catch块里的语句。此时,可能在try块里打开的文件没关闭,连接的网络没断开,对这些浪费的内存就不能及时释放回收。如果有finally块的话,不管有没有出错,都会执行finally块里的内容。(有意思的是,即使try里包含continue,break,return,try块结束后,finally块也会执行。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值