java中所有不正常的类都继承与Throwable类,其主要包括两大类,Error类和Exception类。
Error类中包括虚拟机错误和线程死锁,被称为程序终结者;
Exception类主要指编码、环境、用户操作输入除了问题,主要包括两大类:非检查异常(RuntimeException)和检查异常(CheckException)。
异常处理:
1.try-catch-finally
try:负责捕获异常,一旦try中发现异常,程序的控制权将被一觉给catch语句块中的异常处理程序。try语句不可以单独存在,必须与catch或者finally语句块同村;
catch:处理程序。如发出警告、提示、检查配置、网络连接、记录错误等,执行完catch块之后程序跳出catch语句块,继续执行后面的代码;
finally:最终执行的代码,在try、catch执行完result之后,在调用方法之前运行的,用于关闭和释放资源等。
try{ //一些会抛出的异常 }catch(Exception e){ //处理该异常的代码块 }finally{ //最终要执行的代码 } 终止执行,交由异常处理程序(抛出提醒或记录日志等),异常代码块外代码正常执行。 try会抛出很多种类型的异常,多个catch块捕获多钟错误。 多重异常处理代码块顺序问题:先子类再父类(顺序不对也会提醒错误),finally语句块处理最终将要执行的代码
throws 放在参数之后,方法体之前,可以抛出多种异常,每个异常之间用逗号隔开;
throws写在方法体内,如果某个方法调用了抛出异常的方法,那么必须添加try catch语句去捕获这种异常或添加声明,将异常抛出给更上一层的调用者进行处理。
可以自定义异常,基于Exception类或其子类
异常链:
(1):e.printStrackTrace(); 作用是进行深层次的输出异常调用的流程 (2):RunTimeException(); 这是运行时异常,是所有java虚拟机正常操作期间可以被抛出异常的父类! (3):newExc.initCause(e); 这是一种对异常的一种包装技巧。 initCause()的作用是保存原始的异常,当想要知道底层发生了什么异常的时候调用getCause()就能获得原始异常。