异常处理

概述:
异常是程序在 执行过程中所产生的问题。
认识异常的三种类:
1、编译异常(checkException): 通常是用户错误或者不能被程序员所预见的问题。如:需要打开一个文件,但却无法找到该文件,此时就会产生异常。
2、运行异常(runtimeException):运行异常时一个程序在运行过程中可能发生可能被程序员避免的异常类型。
3、错误(Error):实际上错误根本不是异常,往往是由于硬件问题,程序员无法通过代码来解决的异常。
以上三个异常拥有一个共同的根类Throwable; Throwable分Exception和Error两个子类;然后异常与错误之下还有各自的子类。其中异常下面主要分为编译异常(checkException)与运行异常runtimeException)。

异常的传递机制:
异常一旦发生,JVM(虚拟机)会根据发生异常的类型,产生出该异常的对象。然后把异常对象交给 我们的代码去处理。如果在我们的代码中没有异常处理,那么它就会结束这个发生异常的方法, 带着异常对象返回到方法调用处,看调用处有没有异常处理。如果还是没有,它就再结束掉调用处的方法,带着异常对象返回调用处的调用处。这样一层层结束方法,最后退到main方法。如果main方法还是没有处理这个异常,它就会结束掉main方法,交给JVM自己本处理。JVM的处理 方案是:打印报错信息,结束整个程序。

  • 传递机制告诉我们:
  •  		1、为什么异常信息中第一个at行我们写的代码才是真正异常发生的位置;
    
  •          2、如果想要程序不中断,我们其实可以在任何一个at行进行异常处理;
    
  •          3、选择在哪里进行处理,不仅仅考虑的是程序不中断,最重要的是要考虑程序应该回到哪个正常流程中去。
    

** try——cath——finally**
书写格式:
try块是书写有可能发生异常的正常逻辑代码,我们让这段代码试着运行。
如果没有发生异常,try的代码执行完以后,会自动跳到catch块的外面,继续往下执行剩下的代码;
如果发生异常,try块剩下的代码将全部被跳过不执行,然后JVM会匹配catcha块后面的异常引用是否对应发生异常的对象
匹配上则进入catch块执行,然后跳到catch外面继续往下走,相当于异常已经被处理了;
没有匹配上,则结束当前方法,拿着异常对象发挥方法调用处,进入异常传递机制。

	每个try块后面,可以接多个catch块分别处理不同的异常
	虽然有多个catch块,但是每次只可能发生一个异常,每次也只能执行一个catch块。
	多个catch块的情况下,catch是有顺序,必须把捕获子类异常的写在前面,捕获父类异常的写在后面。
	没有继承关系的异常类,catch的顺序无所谓。
	 catch块只要匹配上,JVM就会认为异常已经被处理了。
	至于catch块的{}里面书写的代码,应该根据具体业务具体实现。
	 可以是错误信息的提示,也可以是错误日志文件的书写,甚至是结束掉整个程序。
			
	finally块专用于书写,不管是否发生异常都必须要执行的代码。
	往往是资源的回收,内存的清理,这些善后动作。
	finally非常强大,就算前面有break或return这种改变程序运行流程的代码也不能阻止它先被执行,再完成流程改变。
	代码级别唯一能阻止finally的,只有System.exit(0);
			System.out.println("不管是否发生异常都要执行。");

格式示例:

 try {

		} catch(ArithmeticException ae) {
		
		} catch (InputMismatchException ime) {
		
		} catch(Exception ex) {
		
		} finally {
			
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值