一、异常的概念:
二、异常的分类:
所有的Error和Exception都继承自throwable类,throwable类是万恶之源。
Error类是系统的内部错误,即虚拟机出错;Exception类是我们可以处理的异常,可以被catch,Exception类主要分为两大类,RuntimeExcetion类和其他。RuntimeExcetion异常可以捕获,也可以不捕获,经常出现;另一类异常必须被捕获,处理了才能继续运行。
举例1:可以不捕获的异常
void m(int i) throw ArithmeticException {
if( i == 0)
throw new ArithmeticException("被除数为0");
}
(1)不捕获异常的情况
TestEx te = new TestEx();
te.m(0);
(2)捕获异常的情况
try{ new TestEx().m(0); }
catch( ArithmeticException ae ){
ae.printStackTrace();
System.out.println("出错了");
}
举例2:必须捕获的异常
in = new FileInputStream("myfile.txt");编译会报错:必须对其进行捕捉或声明以便抛出异常。
三、try_catch_finally关键字:
一个try可以跟着多个catch。如果一个方法后面跟了throw Excetion(例如read()throw IOException),则使用该方法的时候,必须使用try-catch对该方法可能出现的异常进行捕获。
不管是否捕获到异常,finally关键字中的内容,必须被执行。例如下图例子1中语句2不再执行,但是finally中的内容被执行。
四、声明的方法抛出的异常(throws)
当前方法若是对于异常无法处理,则可以向上级抛出该异常throws,让上级去处理该异常。
例如 void f() throws FileNotFoundException , IOException{}//虽然FileNotFoundException是IOException的子类,但是最好都写,分别进行处理
当catch到任何一种异常的时候,至少应该做出一种处理,打印出错误也行,不然异常会被吞噬掉。
五、总结
一个图;五个关键字(throw try_catch_finally throws);
先逮小的异常,再逮大的异常(FileNotFoundException , IOException)
重写的方法不能抛出与被重写的方法不同的异常.若是被重写方法没有抛出异常throws,则重写方法也不能抛出异常.
若try后面跟着多个catch,用于捕获不同的异常,但是不管是哪一种情况,最终只会输出其中之一。
博客引用马士兵Java基础教程中的PPT,如有侵权,请联系删除,谢谢!