多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
Java中异常也是以类,对象的形式存在 异常父类Throwable ①Error错误 ②Exception异常 *** **面试题:Error和Exception的区别** Error指的是比较严重错误,该错误无法通过代码调试挽回 Exception指的是程序运行期间不应该出现的错误,通常称为BUG,可以通过代码修改避免异常 *** ### Exception异常 异常的继承树 ![](https://box.kancloud.cn/93d5b21f222df34938dfbf7925179d51_651x446.png) ①检查性异常 编译器会自动检查,自动提示报错 ②非检查性异常 编译器不会自动检查(例如:数组越界,空指针等),都是因为思维不缜密或没有按照编码规范书写造成的,这种情况应该由程序员自行避免。 *** ### 处理异常的两种方式 ①自行处理 ~~~ public class ExceptionDemo1 { public void test() { // 将参数代表的类加载到JVM内存里 // 处理异常的两种方式 // 1.自行处理try..catch..finally // try块:将有抛出异常风险的代码写到try块当中--相当于体检中心 // try块不能单独存在,绝大多数情况下,与catch配合--相当于医生 // catch块可以存在多个,catch块参数是捕获的异常信息类型 // 思考:finally--书写一定要执行的代码:关闭流,回收资源 try { Class.forName("com.neuedu.chapter8_0426_1.ExceptionDemo1"); int arr[] = {1,2,3}; System.out.println(arr[11]); System.out.println(1111); return; } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(123); } } public static void main(String[] args) { // 数组越界 // int arr[] = {1,2,3}; // System.out.println(arr[13]); // 空指针 ExceptionDemo1 ed = new ExceptionDemo1(); // ed = null; ed.test(); } } ~~~ ②向上抛出 ~~~ public class ExceptionDemo2 { public void test() throws ClassNotFoundException,Exception{ // 2.向上抛出(规避异常) Class.forName("com.neuedu.chapter8_0426_1.ExceptionDemo1"); } public static void main(String[] args) { ExceptionDemo2 ed = new ExceptionDemo2(); try { ed.test(); } catch (Exception e) { e.printStackTrace(); } } } ~~~ *** ### 主动抛出异常throw ~~~ public class PersonTest { public static void main(String[] args) { Person p = new Person(); p.head = 9; p.arms = 1; // 主动触发throw if(p.head != 1 || p.arms != 2) { try { throw new WrongHeadOrArmsException(); } catch (WrongHeadOrArmsException e) { e.printStackTrace(); } } } } ~~~ ### 自定义异常 ~~~ public class WrongHeadOrArmsException extends Exception{ } ~~~