Java之异常浅析

概念

	a. 异常是程序运行过程中出现的错误;
	b. 异常既可以代表一种错误,又可以代表一个消息;
	c. Java的异常处理框架,是Java语言健壮性的一个体现
	d. Java把异常当作对象来处理,并给出一个基类java.lang.Throwable作为所有异常的超类
	e. 异常是程序中的一些错误,但并不是所有错误都可以避免的

异常发生的原因

	a. 用户输入了非法数据
	b. 要打开的文件不存在
	c. 网络通信时连接中断,或者JVM内存溢出

异常的分类

	a. 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略
	b. 运行时异常:运行时异常使可能被程序员忽略的异常,与检查性异常相反,运行时异常可以被编译时忽略
	c. 错误:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略,例如,当栈溢出时,一个错误就发生了,他们在编译也检查不到
	d. Java中所有异常的分类,可分为可查异常和不可查异常:
		i. 可查异常:编译器要求必须处理的异常,正确的程序在运行过程中,经常容易出现可预期的异常情况,一旦发生此类异常,就必须以某种方式进行处理。
		ii. 不可查异常:编译器不会进行检查,并且不要求必须处理的异常,也就是说程序中出现此类异常时,即使我们没有捕获它,也没有使用Throw抛出它,编译也会正常通过,该类异常包括运行时异常和错误

异常的层次类

	a. Throwable
		i. Exception
			1) 编译时异常
			2) 运行时异常
		ii. Error

异常处理流程(抛出异常和捕获异常)

	a. 捕获异常:
		i. 一旦方法抛出异常,系统自动根据该异常对象寻找合适的异常处理器(ExceptionHandler)来处理该异常。所谓何事的异常处理器指的是异常对象类型和异常处理器类型一致。
	b. 抛出异常:当一个方法出现错误而引发异常时,该方法会将异常类型和异常出现时程序的状态信息封装成异常对象,并交给本应用,运行时,该应用将处理异常的代码并执行。任何代码都可以通过throw关键词抛出异常,比如Java源代码抛出异常,自己编写的代码抛出异常

异常的处理方式

	a. 运行异常将由系统自动抛出,应用本身可以选择处理或者忽略该异常
	b. 对于方法中产生的Error,该异常一旦发生JVM将自动处理该异常,因此Java应用不抛出此类异常
	c. 对于所有可查异常,必须进行捕获或者抛出该方法之外交给上层处理。也就是一个方法存在异常时,要么使用try-catch捕获,要么使用throw抛出,交给调用该方法的上层调用者处理

异常处理时的代码流程

	a. Try-catch-finally
		i. try没有捕获异常时,try代码块中的语句依次执行,跳过catch块;如果存在finally块,则执行finally代码块,否则执行后续代码
		ii. try捕获到异常时,如果没有与之匹配的catch子句,则该异常交给JVM处理,如果存在finally,则其中的代码仍然被执行,但是finally之后的代码不会被执行
		iii. try捕获到异常时,如果存在与之匹配的catch子句,则跳到该catch代码块执行处理,如果存在finally,则执行finally中的代码,执行完finally的代码之后的代码继续执行之后的代码,否则直接执行后续代码,另外注意,try代码块中出现异常处之后的代码不会被执行
	b. Try-catch:同上,只是少了个finally代码块
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值