异常的继承结构:
所有的异常都是从Throwable继承来的,它拥有两个子类Error和Exception
Error反应的是java运行时的内部错误和资源耗尽错误,应用程序不抛出此异常类,只会告知用户并且终止程序。
Exception之下有两个子类:RuntimeException和IOexception
RuntimeException是因为程序错误所产生的,I/O错误产生的是IOException
Error和RuntimeException是属于非受查异常,其他的错误属于受查异常
异常的处理
try : 有可能出现异常的语句
catch : 捕获异常
finally : 异常的出口(无论是否抛出异常,finally代码块必须被执行)
public class Main {
public static void main(String args[]) {
try {
System.out.println(5/0);
}catch (ArithmeticException e){
e.printStackTrace();//printStackTrace方法会输出完整的异常信息
}finally {
System.out.println("finally必须执行");
}
}
}
throw关键字
throw是进行人为的异常抛出
throw new Exception("人为抛出的异常")
throw和 throws的区别
- throw用于方法内部,表示手动抛出异常
- throws用于方法的声明,告知用户此方法可能会产生这种异常,而且此方法可能不回去处理此异常
Exception和 RuntimeException的区别
- Exception是RuntimeException的父类,Exception异常必须要进行处理,RuntimeException可以由用户来选择是否处理
常见的RuntimeException
- ClassCastException
类型匹配出现错误 - NullPointerException
空指针异常