异常:描述出错信息的对象
异常的API结构:throwable有两个子类:error和exception,其中error是表示错误,能被虚拟机捕获,但没法处理,一般用于描述崩溃级别的严重错误。
exception称为异常,能被虚拟机捕获,同时也可以在发生异常时对异常进行处理
error是所有错误类的父类,exception是所有异常的父类
try{}catch(nullpionterexcption){e.printstacktrace()}:称为异常捕获,如果在try块中发生了空指针异常,那么会产生空指针异常的对象,可以使用catch块中定义的异常变量指向该对象,通过e.printstacktrace()打印异常对象中封装的出错信息。
一个try块中可以匹配多个catch块,如果try块中发生了异常,只执行第一个匹配异常的catch块,其他catch块全部忽略。
异常执行顺序:先执行try块,顺序执行,如果try中有异常发生,则转到catch块执行,同时终止try块中其他代码的执行,无论是否有异常发生,try,catch执行完毕后,继续执行以后的代码。
常见异常:arithmeticexception 算数异常
arrayidexoutofboundexception 数组下标越界异常
classcastexception 类型转换异常
nullpionterexcption 空指针异常
numberformatexception 数值转化异常
filenotfoundexception 文件未找到异常(打开指定路径失败)

finally语句块:表示无论是否有异常发生,都会执行的语句块,通常用于资源清理工作,比如流的关闭,数据库连接的关闭等
如果try块或catch块中有return语句,那么在跳出方法之前会执行finally块
如果try块或catch块中有system.exit(0)结束程序的语句那么finally块不会执行

异常的分类:编译期异常和运行期异常
编译期异常,要求用户必须处理的,如果用户不处理,则无法通过编译
运行期异常,在调用时用户可以处理,也可以不处理,运行期间异常如果不做处理,同样可以通过编译
所有的运气期异常都是runtimeexcption的子类

final和finally和finalize的区别
final是修饰符,可以修饰类,方法,变量,修饰类表示该类不能被继承,修饰方法表示该方法不能被子类重写,修饰变量表示该变量的值不能改变
finally是语句块,表示无论是否有异常发生,都会执行的语句块
finalize是方法,在object中定义,表示垃圾回收当前对象之前会调用该方法,完成清理工作

throw new numberformat exception():显示抛出异常
throw和throws的区别:
throw是一条语句,表示显示抛出异常
throws是方法的修饰符,表示该方法可能会抛出某种异常,在调用方法时,必须处理该方法所抛出的异常
public void test()throws exception{}