11.1 处理异常

当程序出现异常时,应当次啊去一些异常处理措施:

·返回到一种安全状态,并能够让用户执行一些其他命令;

·允许用户保存所有操作结果,并以合适的方式终止程序。


需要关注的异常问题:

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类的一个构造器的声明:

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方法会打印出这些详细信息,这样便于调试)

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对象的详细描述信息


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值