当程序出现异常时,应当次啊去一些异常处理措施:
·返回到一种安全状态,并能够让用户执行一些其他命令;
·允许用户保存所有操作结果,并以合适的方式终止程序。
需要关注的异常问题:
1、用户输入错误
2、设备错误
3、物理限制
4、代码错误
异常具有自己的语法和特定的继承结构,下面开始介绍:
11.1.1异常分类
所有已成都由Throwable继承而来,Throwable分为Error和Exception;Exception又分为RuntimeException和IOException。
Error类描述Java运行是系统的内部错误和资源耗尽错误。这种情况很少出现
RuntimeException是由程序本身导致的异常;IOException是由其他问题如I/O问题导致的异常。
RuntimeException的异常有以下几种情况:
·错误的类型转换
·数组访问越界(通过检查数组下标是否越界来避免ArrayIndexOutOfBoundsException异常)
·访问空指针(在使用变量之前检测是否为空来避免NullPointerException异常)
如果出现RuntimeException表明一定是你的问题!!!
IOException的异常包括:
·试图在文件尾部读取数据
·试图打开一个错误格式的URL
·试图根据给定的字符串查找class文件,而这个字符串代表的类不存在
Java规定将派生于Error类和RuntimeException类的异常称为未检查异常,IOException称为已检查异常。
11.1.2声明已检查异常
方法应在首部声明有可能出现的异常。例如,下面是标准类库中提供的FileInputStream类的一个构造器的声明:
表示该构造器将根据给定的参数String创建一个FileInputStream对象,也有可能抛出一个FileNotFoundException异常。
遇到以下状况时要抛出异常:
1、调用一个已检查异常的方法
2、程序运行时发现错误,利用throw语句抛出一个已检查异常
3、程序错误
4、JVM和运行时库出现的内部异常
11.1.3如何抛出异常
抛出存在的异常类:
1、找到一个合适的异常类
2、创建这个类的对象
3、将对象抛出。
方法一旦被抛出,这个方法就不能返回到调用者。
11.1.4创建异常类
当遇到任何标准异常类都无法准确描述的问题时,就可以自己创建异常类。要做的是定义一个派生于Exception的类,或派生于Exception的子类。例如:
定义一个派生于IOException的类,定义的类应该包含两个构造器,一个实默认构造器,一个实带有详细描述信息的构造器(超类Throwable的toStrring方法会打印出这些详细信息,这样便于调试)
·Throwable()
构造一个新的Throwable对象,该对象没有详细的描述信息
·Throwable(String message)
构造一个新的throwable对象,该对象有详细的描述信息
·String getMessage()
获取Throwable对象的详细描述信息