java中异常的相关知识

来源:互联网 发布:mac照片视频导出 编辑:程序博客网 时间:2024/06/06 17:21
什么是异常:

异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。

什么是异常处理:
java编程语言使用异常处理机制为程序提供了错误处理能力
java异常处理的五个关键字:
try catch finally throw throws

常见的异常类型

方法名
说明
Exception
异常层次结构的根类
ArithmeticException
算术错误情形,如以零作为除数
ArrayIndexOutOfBoundsException
数组下标越界
NullPointerException
尝试访问null对象成员
ClassNotFoundException
不能加载所有类
InputMismatchException
欲得到数据类型与实际输入类型不匹配
lllegalArgumentException
方法接收到非法参数
ClassCastException
对象强制类型转换出错
NumberFormatException
数字格式转换异常,如把“abc”转换成数字

 Try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?

下面是个测试程序

public class FinallyTest {public static void main(String[] args) {System.out.println(new FinallyTest().test());;}static int test(){int x = 1;try{x++;return x;}finally{++x;}}}

结果是2,意思是finally里的代码没执行?

肯定执行了

你在finally里加一条输出语句你就知道了

但结果为什么会是2呢?

try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。

在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,

因此,即使finally中对变量a进行了改变,但是不会影响返回结果。

它应该使用栈保存返回值。

主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。

当有第二个return的时候,主函数就会将上一个结果覆盖,

所以对于上面第二种情况的输出结果:一开始main函数的空罐子接收的是i=1,后面执行finally,将i=2返回,所以最后输出的结果是i=2


异常处理注意事项
既然捕获了异常,就要对他进行适当的处理。不要捕获异常之后又把她丢弃,不予理睬。
在catch语句中尽可能指定具体的异常类型,必要时使用多个catch。不要试图处理所有可能出现的异常
保证所有资源都被正确释放。充分运用finally关键词。
在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读
尽量减小try块的体积

ErrorException有什么区别

Error类和Exception类的父类都是throwable类,他们的区别是:

Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。

Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。

Exception类又分为运行时异常(Runtime Exception)和受检查的异常(Checked Exception ),运行时异常;ArithmaticException,IllegalArgumentException,编译能通过,但是一运行就终止了,程序不会处理运行时异常,出现这类异常,程序会终止。而受检查的异常,要么用try。。。catch捕获,要么用throws字句声明抛出,交给它的父类处理,否则编译不会通过。

常见的异常;

ArrayIndexOutOfBoundsException数组下标越界异常,

ArithmaticException 算数异常 如除数为零

NullPointerException 空指针异常

IllegalArgumentException不合法参数异常


原创粉丝点击