昨天实训上午讲了异常,感觉有点印象模糊,特意回顾仔细看了下,所以今天写下对java中异常的处理和分析
一.异常的简介和分类
异常:有异于常态,和正常情况不一样,有错误出现阻止当前方法或作用域,称之为异常Exception;
Throwable:所有不正常类的父类,Error和Exception的父类;
Error:系统的错误,代码中无法处理,需要重新检查;
Exception:称为异常,代码中可以处理的;
二.Exception的两大类的介绍
Exception总体分为两大类:运行时异常和受检异常(编译异常)
1.RuntimeException运行时异常:
运行时异常在程序编译时不会抛出异常,只有在程序运行时才会抛出该异常,该异常会中断程序的正常运行;如果在函数内容中抛出异常对象,函数上可以不用声明,编译一样通过;如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过;
解释:为什么不用在函数声明,是因为不需要让调用者处理,当该异常发生时,希望程序停止,
因为在运行时,出现了无法继续运算的情况,希望停止程序后对代码进行修正!
2.受检异常(编译异常):
受检异常在程序编译的时候会自动检测并抛出异常,如果没有对受检异常进行处理,编译时程序就会出错;
如:文件的读写操作,数据的一些操作等都会产生编译异常;
三.异常的处理
java中异常的处理先要放在try语句块中进行捕获,如果发生异常jvm会自动throw抛出相应的异常对象,然后和try块后的catch块括号中的异常类进行匹配,要是匹配就执行该catch块中的语句,否依次匹配下面的catch块,没有则中断程序,要是有finally语句块在jvm打印异常堆栈追踪信息前打印finally块中的信息;
异常处理的语法:
1. try{...}catch(Exception){...}
2. try{...}finally{...}
3 .try{...}catch(Exception e){...}finally{...}
异常机制:
栈就是方法的工作空间,一执行方法就压栈,异常机制就是采用异常栈机制
四.注意事项(总结整理的有点乱)
1. finally中定义的通常是关闭资源代码,因为资源必须释放;
2. 当执行到System.exit()时,finally不会执行;
3. 当try中有return值,catch中也有return值,最后返回catch中的return值,
但是finally中也有return值,最后返回finally中的return值;
4. 编译异常又称为受检异常,try语句块不易过大,catch块以倒三角型进行排布;
5.java处理异常的机制会不会影响效率,原则上不会,实际上要是处理异常和抛出
异常间隔太远会影响效率,尽量在当前方法中进行异常处理;
6.当函数内容有throw抛出异常对象,并未进行try-catch处理,则要在函数上声明,否则编译出错;
7.throws使用在函数上;throw使用在函数内;throws后面跟的异常类,可以跟多个,用逗号隔开;
throw后面跟的是异常对象