java异常机制中主要包括一个图、五个关键字、异常捕获顺序、异常和重写的关系,下面分部详解:
一个图
借助这个图,我们需要知道Throwable是所有异常的祖宗类。Error:系统错误,处理不了的错误,Exception:可以处理的异常。Exception又分为RuntimeException和其它,RuntimeException:经常出的错误,可以catch,也可以不catch;其它是我们必须要处理的异常。
五个关键字
try、catch、finally、throw、throws
public class Test { public static void main(String[] args) { Test t = new Test(); t.manager(); } public void regist(int num) throws MyException { if (num < 0) { throw new MyException("人数为负值,不合法", 3); } System.out.println("登记人数:" + num); } public void manager() { try { regist(-1); } catch (MyException e) { System.out.println("登记失败,出错类型码=" + e.getId()); } finally { System.out.println("c操作结束"); } } }try是代码正常运行时的部分,catch是代码捕获到异常时执行的部分,finally是无论代码是否正常运行最终都会执行的部分。
在manager方法中调用了必须捕获异常的regist方法。在调用时,可以采取上述try...catch的方式对异常进行处理,在catch中捕获到regist方法throw的new MyException异常;也可以用throws向manager方法的上一级继续抛异常,形式如下:
public void manager() throws MyException{ regist(-1); System.out.println("c操作结束"); }由于manager方法没有对异常进行处理,所以在main方法中调用manager方法时,要么用try...catch进行处理,要么向main方法的上一级继续抛异常。
先逮小的,再逮大的
比如在被调用的方法中,即存在IOException异常,又存在FileNotFoundException异常(继承于IOException异常),我们应该先捕获FileNotFoundException异常再捕获IOException异常。
异常和重写的关系
重写需要抛出与原方法所抛出异常类型一致异常或不抛出异常。
如果A中的method方法抛出IOException异常,则继承A的B要么不抛出异常,要么也抛出IOException异常,演示如下:
class A{ public void method() throws IOException{} }重写方案一:
class B extends A{ pulic void method{} }
重写方案二:
class B extends A{ public void method() throws IOException{} }第一遍看完马士兵老师,只知道马老师讲的好,说不上哪好。现在看第二遍,对各个部分进行总结,深入了解马老师教学内容的精髓。
学习过程中,总结很有必要!!!