异常处理

异常处理

面试题常问:运行时异常和非运行时异常的区别?
运行异常:运行时异常是不可查异常,不需要进行显式的捕捉。这些异常一般是由程序逻辑错误引起的。
我们常见的5中运行时异常:

  1. ClassCastException(类转换异常)
  2. IndexOutOfBoundsException(数组越界)
  3. NullPointerException(空指针)
  4. ArrayStoreException(数据存储异常,操作数组时类型不一致)
  5. 还有IO操作的BufferOverflowException异常

非运行时异常:是可查异常,必须进行显式的捕捉,或者抛出(对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过)。
常见非运行异常有:

  1. NoSuchMethodException:方法未找到异常
  2. IOException:输入输出异常
  3. EOFException:文件已结束一场
  4. FileNotFoundException:文件未找到异常
  5. NumberFormatException:字符串转换为数字异常
  6. SQLException:操作数据库异常
    异常分类

Java 语言如何进行异常处理,关键字:throws、throw、try、 catch、finally分别如何使用?

Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java 中,每个异常都是一个对象,它是Throwable类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java 的异常处理是通过5 个关键词来实现的:try、catch、throw、throws和finally。一般情况下是try来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时候你可以通过它的类型来捕(catch)它,或后(finally)由缺省处理器来处理;try用来指定一块预防所有“异常”的程序;catch子句紧跟在try块后面,用来指定你想要捕捉的“异常”的类型;throw语句用来明确地抛出一个“异常”;throws用来标明一个成员函数可能抛出的各种“异常”;finally为确保一段代码不管发生什么“异常”都被执行一段代码;可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try 语句,“异常”的框架就放到栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种“异常”进行处理,栈就会展开,直到遇到有处理这种“异常”的try 语句。

Java 异常处理try-catch-finally的执行过程

try-catch-finally程序块的执行流程以及执行结果比较复杂。

  1. 程序首先会运行可能发生的异常try语句块。
  2. 如果没有发生异常则执行完成后,直接跳到finally语句块执行。
  3. 如果出现异常,则将根据出现的异常类型跳到相应的catch语句块中执行。
  4. catch语句块可以有多个,用来处理不同类型的异常类型。比如:多异常捕获。
try{
	//可能发生异常额语句块
}catch(异常类型 e){
	//异常处理语句块和返回
}catch(异常类型 e){
	//异常处理语句块和返回
}try{
	//可能发生异常额语句块
}catch(异常类型1 | 异常类型2 e){
	if(e instanceof 异常类型1){
		//异常处理语句块和返回
	}
	if(e instanceof 异常类型2){
		//异常处理语句块和返回
	}
}
  1. catch执行完,会继续执行finally语句块。
    finally是可选的,无论有没有发生异常,finally语句块都会执行的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值