<CoreJava> 11.1 处理异常
2013-02-28 19:04
295 查看
当程序出现异常时,应当次啊去一些异常处理措施:
·返回到一种安全状态,并能够让用户执行一些其他命令;
·允许用户保存所有操作结果,并以合适的方式终止程序。
需要关注的异常问题:
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类的一个构造器的声明:
[java]
view plaincopy
public FileInputStream(String name) throws FileNotFoundException
表示该构造器将根据给定的参数String创建一个FileInputStream对象,也有可能抛出一个FileNotFoundException异常。
遇到以下状况时要抛出异常:
1、调用一个已检查异常的方法
2、程序运行时发现错误,利用throw语句抛出一个已检查异常
3、程序错误
4、JVM和运行时库出现的内部异常
11.1.3如何抛出异常
抛出存在的异常类:
1、找到一个合适的异常类
2、创建这个类的对象
3、将对象抛出。
方法一旦被抛出,这个方法就不能返回到调用者。
11.1.4创建异常类
当遇到任何标准异常类都无法准确描述的问题时,就可以自己创建异常类。要做的是定义一个派生于Exception的类,或派生于Exception的子类。例如:
定义一个派生于IOException的类,定义的类应该包含两个构造器,一个实默认构造器,一个实带有详细描述信息的构造器(超类Throwable的toStrring方法会打印出这些详细信息,这样便于调试)
[java]
view plaincopy
class FileFormatException extends IOException {
public FileFormatException() {}
public FileFormatException(String gripe) {
super(gripe);
}
}
//现在就可以自定义异常类型了
String readData(BufferedReader in) throws FileFormatException {
....
while(...) {
if (ch == 1) {
if (n < len)
throw new FileFormatException();
}
....
}
return s;
}
API:java.lang.Throwable 1.0
·Throwable()
构造一个新的Throwable对象,该对象没有详细的描述信息
·Throwable(String message)
构造一个新的throwable对象,该对象有详细的描述信息
·String getMessage()
获取Throwable对象的详细描述信息
·返回到一种安全状态,并能够让用户执行一些其他命令;
·允许用户保存所有操作结果,并以合适的方式终止程序。
需要关注的异常问题:
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类的一个构造器的声明:
[java]
view plaincopy
public FileInputStream(String name) throws FileNotFoundException
表示该构造器将根据给定的参数String创建一个FileInputStream对象,也有可能抛出一个FileNotFoundException异常。
遇到以下状况时要抛出异常:
1、调用一个已检查异常的方法
2、程序运行时发现错误,利用throw语句抛出一个已检查异常
3、程序错误
4、JVM和运行时库出现的内部异常
11.1.3如何抛出异常
抛出存在的异常类:
1、找到一个合适的异常类
2、创建这个类的对象
3、将对象抛出。
方法一旦被抛出,这个方法就不能返回到调用者。
11.1.4创建异常类
当遇到任何标准异常类都无法准确描述的问题时,就可以自己创建异常类。要做的是定义一个派生于Exception的类,或派生于Exception的子类。例如:
定义一个派生于IOException的类,定义的类应该包含两个构造器,一个实默认构造器,一个实带有详细描述信息的构造器(超类Throwable的toStrring方法会打印出这些详细信息,这样便于调试)
[java]
view plaincopy
class FileFormatException extends IOException {
public FileFormatException() {}
public FileFormatException(String gripe) {
super(gripe);
}
}
//现在就可以自定义异常类型了
String readData(BufferedReader in) throws FileFormatException {
....
while(...) {
if (ch == 1) {
if (n < len)
throw new FileFormatException();
}
....
}
return s;
}
API:java.lang.Throwable 1.0
·Throwable()
构造一个新的Throwable对象,该对象没有详细的描述信息
·Throwable(String message)
构造一个新的throwable对象,该对象有详细的描述信息
·String getMessage()
获取Throwable对象的详细描述信息
相关文章推荐
- Java基础之(三十六)Java异常处理<二>
- <Core Java> 4.4 静态域和静态方法
- <CoreJava> 5.3 泛型数组列表
- <Core Java> 4.6 对象构造
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.6 中断和异常处理
- <Core Java> 4.5 方法参数
- java List的<>中 方法参数是父类对象的list。传入子类对象时的处理
- <Java编程思想>第12章:通过异常处理错误
- <Core Java> 第三章 Java基本的程序设计结构
- <CoreJava> 6.3 接口与回调
- java基础篇--07<java异常处理>
- <Core Java> 5.1 类、超类和子类
- java异常处理<1>__笔记(17)
- <Core Java Volume I Fundamentals 9th Edition> Note 01
- <1>JAVA对异常的捕获机制
- java异常处理<3>__笔记(19)
- Java基础<异常机制>总结(异常体系、Exception特点、异常处理方式)
- eclipse插件版本或路径更改后的异常处理:java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContainer
- <CoreJava> 11.2 捕获异常
- <CoreJava> 12.2简单泛型类的定义