2015年11月20日18:42:32
Java高级部分异常重点总结
作者:数据分析玩家
1.简述学习异常的必要性
1>在Java当中,大多数工具【类】里面的方法都会抛出一个异常,我们必须对这些异常进行捕获处理,否则编程的时候会出错
2>编程的时候有些问题必须用异常进行处理,if……else无法进行解决
2.简述对异常概念的理解
1>异常是程序运行过程中发生的事件,该事件可以中断程序指令的正常执行流程,使程序被强行终止
2>异常本质上就是一个类对象,由java虚拟机自动封装生成的一个类对象,因此它也是以类的方式生成的,如:
Exception e = new Exception(),该对象包含了很多信息,包括出错的信息
3>异常是一种处理机制,它提供了一种能够对错误处理的机制,异常不是编译时的错误,编译时的错误叫error,异常指的是运行时表现出来的一些错误
3.简述异常处理机制
在java当中,若一个程序在运行的时候出错,java虚拟机会自动的在出错的地方生成一个异常对象,而后java虚拟机会自动的在出错地方的附近寻找有没有对这个异常对象处理的代码,所谓异常处理代码就是try……catch语句和throws语句,如果没有,java虚拟机会自动的将这个异常对象抛给其调用函数,就这样层层抛出,如果在main当中也没有对这个异常对象处理的代码,java虚拟机最后会做一个简单粗暴的处理,将整个程序给终止掉,并将错误的信息在显示屏上输出
4.简述异常的分类
Error是编译时的错误,是程序员无法处理的异常
Exception是程序员可以捕获并处理的异常
所有异常的类都是Throwable的子类,普通类不能当做异常类,异常类必须要继承Throwable
异常分为2类:
1>凡是RuntimeException的子类异常,是程序员可以处理也可以不处理的异常
2>凡是Exception的子类异常但又不是RuntimeException的子类异常,是程序员必须进行捕获并处理的异常,否则编译时会出错
5.简述异常处理代码中try……catch的作用
1>try……catch语句本质上是对用户可能出现的错误进行的处理与提示,当用户出现了相应的错误之后,try……catch语句会将这个错误给捕获到,并进行相应的处理,以保证程序的流程不被打断,继续执行下去
2>只有try里面的代码出现了相应的错误,try……catch语句才会才会得到执行,否则try……catch语句将不会被执行
6.简述异常处理代码中try和catch关键字的具体含义
1>try即抛出的意思:java规定只有放在try里面的代码抛出的异常对象才有可能被捕获,即try里面存放的是可能抛出异常对象的代码,因此程序员必须自己判断哪些代码会出错,并将可能出错的代码放到try里面去;java编译器认为:一旦程序员将代码放到try里面去,意味着这些代码就会出错,就会抛出异常,因此如果代码不出错或不抛出异常的话就不要放到try里面去
2>catch即捕获的意思:catch当中的形式参数会自动的将异常对象给捕获到,并进行相应的处理;catch函数当中的printStack的作用是:输出错误的信息与错误的路径,便于程序的调试
7.简述异常处理代码块:
Try
{语句1;语句2;可能抛出异常的代码块…… }
Catch(Exception 1e){ }
Catch(Exception 2e){ }…………
Finall{ …………}的注意事项
1>如果语句1抛出了异常对象,语句2永远都得不到执行
2>所有的catch语句只能有一个被执行,并且有可能所有的catch语句都得不到执行
3>注意要先catch子类异常,在catch父类异常,如果先catch父类异常,在catch子类异常,则编译时会报错
4>注意子类重写方法抛出异常的范围不能大于父类被重写方法抛出异常的范围【为了保证多态的实现】【在线程当中经常用到这个知识】
5>无论try语句是否抛出异常,finally中的代码都会得到执行
8.简述异常处理代码块中finally的作用
1>finally语句为异常处理提供一个统一的出口,使得程序的控制流程在转到其它部分以前,能够对程序的状态做一个统一的管理
2>在finally语句中可以进行资源的清理工作,如关闭打开的文件,删除临时的文件等等
9.简述异常的两种处理方式
假设f方法抛出了A异常,则f方法有两种方式来处理A异常:
1>通过try……catch语句自己进行处理
2>自己不处理,通过throws A交给调用它的函数来进行处理
10.简述异常当中throw与throws两个关键字的用法
Throw
1>throw用来抛出异常对象:
格式为:throw new 异常名();
2>throw抛出的异常,必须是throwable的子类异常
Throws
1>throws只是一个声明,表示本函数不对抛出的异常A进行处理,交给调用它的函数来进行处理,最后交给jdk
格式为:void f() throws A
2>throws A不表示调用f方法时,必须要对A异常进行捕获处理,可以根据异常的分类来进行处理
综上:
1>如果在一个方法内部已经对A异常通过try……catch语句进行捕获处理了,就不要在throws了
2>建议程序员对throws出的所有异常都进行捕获处理
11.简述异常的优缺点
优点:
1>增强了程序员对程序的可控性,保证了程序的流程顺利执行,不被打断
2>异常信息有利于代码的调试
3>强制程序员考虑程序的安全性与健壮性
缺点:
1>异常并不能够解决所有的问题
2>异常并不一定使程序的逻辑更加清晰,有的时候会导致程序的逻辑更加混乱
2015年11月20日20:41:32