《Java核心技术卷1》第7章:异常、断言和日志

7.1 处理错误

1. 异常的概念:

在 Java 中, 如果某个方法不能够采用正常的途径完整它的
任务, 就可以通过另外一个路径退出方法 。 在这种情况下 , 方法并不返回任何值 ,而是抛出( throw ) 一个封装了错误信息的对象。
需要注意的是 , 这个方法将会立刻退出 , 并不返回任何值。 此外 , 调用这个方法的代码也将无法继续执行 , 取而代之的是 , 异常处理机制开始搜索能够处理这种异常状况的异常处理器 (exception handler )

在这里插入图片描述

Error 和 Exception

Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误 。 应用程序不应该抛出这种类型的对象 。 如果出现了这样的内部错误 , 除了通告给用户, 并尽力使程序安全地终止之外 , 再也无能为力了。 这种情况很少出现 。

Exception

  • RuntimeException 程序本身错误导致的异常(未受查异常)
  • 其他异常(受查异常)程序本身没有问题 , 像 I / O 错误这类问题导致的异常属于其他异常 。

在这里插入图片描述

Java 语 言 规 范 将 派 生 于 Error 类 或 RuntimeException 类的所有异常称为非受查( unchecked ) 异常, 所有其他的异常称为受查 ( checked )异常。
这是两个很有用的术语 , 在后面还会用到 。 编译器将核查是否为所有的受査异常提供了异常处理器。

注释 : RuntimeException 这个名字很容易让人混淆。
实际上, 现在讨论的所有错误都发生在运行时

Java中throws和throw的区别讲解

2. 声明受查异常

在这里插入图片描述
1 ) 调用一个抛出受査异常的方法 , 例如 , FilelnputStream 构造器。
2 ) 程序运行过程中发现错误 , 并且利用 throw 语句抛出一个受查异常 ( 下一节将详细地介绍 throw 语句 ) 。
3 ) 程序出现错误 , 例如, a [ - l ] = 0 会抛出一个ArraylndexOutOffloundsException 这样的非受查异常。
4 ) Java 虚拟机和运行时库出现的内部错误

如果出现前两种情况之一, 则必须告诉调用这个方法的程序员有可能抛出异常 。 为什么 ? 因为任何一个抛出异常的方法都有可能是一个死亡陷阱。 如果没有处理器捕获这个异常, 当前执行的线程就会结束 。

但是 , 不需要声明 Java 的内部错误, 即从Error 继承的错误。 任何程序代码都具有抛出那些异常的潜能 , 而我们对其没有任何控制能力。
同样, 也不应该声明从 RuntimeException 继承的那些非受查异常 0。

class MyAnimation
{
void drawlmage ( int i ) throws ArraylndexOutOfBoundsException // bad style
}

总之
, 一个方法必须声明所有可能抛出的受查异常 , 而非受查异常要么不可控制 (Error ) ,要么就应该避免发生 ( RuntimeException ) 。 如果方法没有声明所有可能发生的受查异常 , 编译器就会发出一个错误消息.

在这里插入图片描述

在Java中 , 没有 throws 说明符的方法将不能抛出任何受查丼常

7.2 捕获异常

1. 如何抛出异常

在这里插入图片描述

在这里插入图片描述

2. finally子句:再次抛出异常

InputStreai in = . .
try{
	code that might throw exceptions
}
finally
{
	in.close() ;
}

在这里插入图片描述


InputStream in = . . . ;
Exception ex = null ;
try{
	try{
		code that might throw exceptions
	}
	catch ( Exception e ){
		throw e ;
	}
}
finally
{
	try{
	in.doseO ;
	}
	catch ( Exception e )
	{
	if ( ex = null ) throw e 
	}
}

3. 带资源的try语句

在这里插入图片描述

4. 分析堆栈轨迹元素

7.3 使用异常机制的技巧

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_popo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值