image.png

异常的继承体系:

  1. ** 抛出异常时,可以直接抛出该异常或者该异常的父异常**<br /> ** try catch 可以捕获当前异常或者当前异常的父异常**![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655042474292-8e661924-7199-4b0d-a64e-fbf2c7811a91.png#clientId=uffc4859c-b98b-4&crop=0.0175&crop=0.0374&crop=0.8292&crop=1&from=paste&height=152&id=u29c389a6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=234&originWidth=571&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13985&status=done&style=none&taskId=u1e0c4bcc-83ea-473b-b523-6d6f7aaa2ea&title=&width=371)<br /> ** 在子类继承父类中,子类覆写的父类方法中,**<br /> **如果父类被覆写的方法没有抛出异常,**<br />** 那么子类方法不能抛出任何异常**<br /> **子类方法只能try catch**<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655043366267-e18d8c6f-ee4e-47f8-94e4-72df84135afd.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=102&id=u2bcca2a3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=127&originWidth=289&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5180&status=done&style=none&taskId=u0bf2a6f6-df6c-43b9-8086-c90dcb9bcf5&title=&width=231.2)![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655043389615-c5666230-ffdb-4fd3-930c-2e62b94abca8.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=164&id=u0ac55150&margin=%5Bobject%20Object%5D&name=image.png&originHeight=205&originWidth=734&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16559&status=done&style=none&taskId=ud1aaf786-fc91-4950-8988-a251edab62b&title=&width=587.2)<br />** 如果父方法抛出了异常那么子类的方法才可抛出异常**![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655043472920-f5cb5eb5-b1c0-4d78-9dd6-d40e06d15c92.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=85&id=u80eb1dd6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=106&originWidth=434&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5145&status=done&style=none&taskId=u21afe03d-8b08-4002-842a-b94bf021af1&title=&width=347.2)![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655043486612-aff8e3f4-f1c0-47eb-a47d-75016e61d4e1.png#clientId=uffc4859c-b98b-4&crop=0.0533&crop=0.0563&crop=1&crop=1&from=paste&height=89&id=uf1aac16b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=117&originWidth=643&originalType=binary&ratio=1&rotation=0&showTitle=false&size=10106&status=done&style=none&taskId=u3e312871-0d34-473f-ad51-88594d92ff6&title=&width=487)

如果父类方法抛出异常,那么子类覆写方法抛出异常处理方式:

  1. ** 1.不抛出(try...catch处理)**<br />** 2.抛出跟父类异常的同样异常**<br />** 3.抛出父类异常的子异常**<br /> **子类覆写的方法 只能抛出异常的类型是 小于等于父类抛出的异常**

多异常处理:

  1. 如果一段代码中出现好几处非运行时异常,那处理方式:<br /> 1.分别抛出 在方法上面多个抛出异常用逗号隔开![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655046203275-61c29ee2-0f1c-42d1-9e56-4d6ab339ff11.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=67&id=u9a610d46&margin=%5Bobject%20Object%5D&name=image.png&originHeight=148&originWidth=926&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16669&status=done&style=none&taskId=u9ed1166b-60fe-4231-b52d-f45a8247ab8&title=&width=421)<br /> 2.统一抛出一个父异常![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655046289256-8cfc45a9-aff1-4cbb-9933-725e1537e4f3.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=118&id=ua5225515&margin=%5Bobject%20Object%5D&name=image.png&originHeight=147&originWidth=641&originalType=binary&ratio=1&rotation=0&showTitle=false&size=13561&status=done&style=none&taskId=u23e2a243-4990-47ba-9768-8988d32f4f6&title=&width=512.8)<br /> 3.分别try catch![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655046365068-15caa897-aa2b-4b08-8153-0db8ffc6303b.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=246&id=ue1cbfe3a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=308&originWidth=603&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21321&status=done&style=none&taskId=u6549fc54-7ec5-487c-9d47-f6493f8cb58&title=&width=482.4)<br /> 4.统一try catch try代码块里面出现多个要处理的异常 处理方式<br /> (1):多个catch代码块![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655046628373-02978c2e-9ca9-4510-82e7-0da04f7bcb36.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=202&id=ub2084db8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=253&originWidth=766&originalType=binary&ratio=1&rotation=0&showTitle=false&size=25013&status=done&style=none&taskId=uc92e6261-d093-4cff-99be-942af077750&title=&width=612.8)<br /> (2)单个catch代码块 用| 隔开 匹配多个异常 1.7新写法![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655046902795-e087f78e-0868-45f3-9a9e-cc6e8815aad0.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=147&id=u503e9376&margin=%5Bobject%20Object%5D&name=image.png&originHeight=184&originWidth=612&originalType=binary&ratio=1&rotation=0&showTitle=false&size=16930&status=done&style=none&taskId=u6651c4d2-5c1a-4f7e-b376-645c925e339&title=&width=489.6)<br /> 不推荐 try里面写太多代码 否则会出现多个错误 无法挨个处理<br /> 一旦有报错 直接匹配catch try后面的代码无法被执行

针对运行时异常的处理

  1. ** try catch**<br /> 如果运行时异常报错程序终止,这样不太健壮<br /> 所以我们可以在有可能出现运行时异常的隐患处<br /> **自己手写try catch异常**![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655047215389-155fe47f-8d6f-44a5-b9e9-2db0c160efd1.png#clientId=uffc4859c-b98b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=115&id=u765a7c17&margin=%5Bobject%20Object%5D&name=image.png&originHeight=144&originWidth=428&originalType=binary&ratio=1&rotation=0&showTitle=false&size=11065&status=done&style=none&taskId=u6d81a4d7-8289-4c22-ad26-f016cd78d17&title=&width=342.4)<br /> **手动炸掉程序**<br /> RuntimeException r=new RuntimeException();<br /> throw r; //一但炸掉后续代码也不执行<br />throw 自定义异常对象/系统异常对象 手动抛出一个异常错误对象<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655051690825-d16a0a86-06eb-4b38-93c2-d68a047fdd2c.png#clientId=u22823e2f-9b11-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=130&id=u61accaf2&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=655&originalType=binary&ratio=1&rotation=0&showTitle=false&size=22073&status=done&style=none&taskId=u95470fbd-1974-447d-9944-0b0b905bad4&title=&width=524)

如何直接定义一个异常类?

  1. 自定义异常类 一个类继承异常类<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/28889470/1655051874040-336db6f5-b4f5-4745-bb3d-bdd1ec36fe68.png#clientId=u22823e2f-9b11-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=166&id=u0d2dca8a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=207&originWidth=516&originalType=binary&ratio=1&rotation=0&showTitle=false&size=21296&status=done&style=none&taskId=u8f038950-4c31-46e7-b448-feeec599f62&title=&width=412.8)